Previous 15994 Revisions Next

r7641 Friday 26th March, 2010 at 03:25:34 UTC by Nathan Woods
Updated to MAME 0.137u1 core
[ROOT]makefile
[docs]messnew.txt
[src/build]png2bdc.c
[src/emu]clifront.c inptport.c output.c rendlay.c tilemap.c tilemap.h
[src/emu/cpu/avr8]avr8.c
[src/emu/cpu/g65816]g65816op.h
[src/emu/cpu/h83002]h8_8.c
[src/emu/cpu/i386]i386op16.c i386op32.c i386priv.h pentops.c
[src/emu/cpu/m37710]m37710op.h
[src/emu/cpu/m6800]m6800.c
[src/emu/cpu/m68000]m68kfpu.c
[src/emu/cpu/mc68hc11]hc11ops.c hc11ops.h
[src/emu/cpu/mn10200]mn10200.c mn10200.h
[src/emu/cpu/ssem]ssem.c
[src/emu/cpu/tlcs90]tlcs90.c
[src/emu/cpu/v30mz]nec.h v30mz.c
[src/emu/cpu/z8000]makedab.c
[src/emu/debug]express.c
[src/emu/sound]ay8910.c tms5110.c tms5110r.c tms5220.c votrax.c
[src/emu/video]rgbutil.c rgbvmx.h
[src/lib/softfloat]mamesf.h
[src/mame]mamedriv.c
[src/mame/audio]exidy.c snes_snd.c taito_zm.c
[src/mame/drivers]berzerk.c cave.c cbasebal.c ddenlovr.c dwarfd.c dynax.c funworld.c galaxian.c galdrvr.c gei.c konamigx.c mazerbla.c megatech.c metro.c model3.c namcofl.c namcos11.c namcos2.c namcos21.c namcos22.c namcos23.c nss.c paradise.c pasha2.c pass.c pastelg.c pbaction.c pgm.c poo.c raiden2.c scramble.c segaybd.c snesb.c stv.c thunderx.c toaplan1.c twincobr.c ultrsprt.c vamphalf.c vmetal.c wardner.c yiear.c zn.c
[src/mame/includes]dynax.h exidy.h metro.h* paradise.h pass.h pbaction.h* snes.h twincobr.h
[src/mame/layout]bigdeal.lay* jollycrd.lay* namcofl.lay* royalcrd.lay*
[src/mame/machine]kaneko16.c n64.c namcos2.c snes.c snessdd1.c twincobr.c
[src/mame/video]amiga.c amigaaga.c cave.c dynax.c funworld.c hng64.c konamigx.c konicdev.c metro.c n64.c paradise.c pass.c pastelg.c pbaction.c psikyosh.c snes.c stvvdp2.c taitoic.c taitojc.c toaplan1.c twincobr.c
[src/osd/sdl]debugwin.c gl_shader_tool.c input.c sound.c testkeys.c window.c
[src/osd/windows]debugwin.c video.c
[src/tools]split.c srcclean.c

src/build/png2bdc.c
r7640r7641
399399   /* validate arguments */
400400    if (argc < 3)
401401    {
402       fprintf(stderr, "Usage:\npng2bdf <input.png> [<input2.png> [...]] <output.bdc>\n");
402       fprintf(stderr, "Usage:\n%s <input.png> [<input2.png> [...]] <output.bdc>\n", argv[0]);
403403       return 1;
404404    }
405405    bdcname = argv[argc - 1];
src/mame/audio/exidy.c
r7640r7641
7373static struct sh6840_timer_channel sh6840_timer[3];
7474static INT16 sh6840_volume[3];
7575static UINT8 sh6840_MSB;
76static UINT8 sh6840_LFSR_oldxor = 0; /* should be saved in savestate */
77static UINT32 sh6840_LFSR_0;/* ditto */
78static UINT32 sh6840_LFSR_1;/* ditto */
79static UINT32 sh6840_LFSR_2;/* ditto */
80static UINT32 sh6840_LFSR_3;/* ditto */
76static UINT8 sh6840_LFSR_oldxor = 0;
77static UINT32 sh6840_LFSR_0;
78static UINT32 sh6840_LFSR_1;
79static UINT32 sh6840_LFSR_2;
80static UINT32 sh6840_LFSR_3;
8181static UINT32 sh6840_clocks_per_sample;
8282static UINT32 sh6840_clock_count;
8383
r7640r7641
604604 *
605605 *************************************/
606606
607static READ8_HANDLER( exidy_sh6840_r )
607READ8_HANDLER( exidy_sh6840_r )
608608{
609   logerror("%04X:exidy_sh6840_r - unexpected read", cpu_get_pc(space->cpu));
609   logerror("%04X:exidy_sh6840_r - unexpected read\n", cpu_get_pc(space->cpu));
610610   return 0;
611611}
612612
src/mame/audio/snes_snd.c
r7640r7641
179179   int             on_cnt;         /* Is it time to turn on yet?   */
180180   int             pitch;          /* Sample pitch (4096->32000Hz) */
181181   int             range;          /* Last header's range          */
182    UINT32          samp_id;        /* Sample ID#                   */
182   UINT32          samp_id;        /* Sample ID#                   */
183183   int             sampptr;        /* Where in sampbuf we are      */
184184   signed long     smp1;           /* Last sample (for BRR filter) */
185185   signed long     smp2;           /* Second-to-last sample decoded*/
r7640r7641
202202   UINT8                   ipl_region[64];      /* SPC top 64 bytes */
203203
204204   int                     keyed_on;
205   int                     keys;               /* 8-bits for 8 voices */
205   int                     keys;            /* 8-bits for 8 voices */
206206   voice_state_type        voice_state[8];
207207
208208   /* Noise stuff */
r7640r7641
246246
247247
248248/*-------------------------------------------------
249 dsp_reset
249 dsp_reset
250250
251251 Reset emulated DSP
252252-------------------------------------------------*/
r7640r7641
285285
286286
287287/*-------------------------------------------------
288 dsp_update
288 dsp_update
289289
290 Mix one sample of audio. sound_ptr is a pointer
290 Mix one sample of audio. sound_ptr is a pointer
291291 to mix audio into
292292-------------------------------------------------*/
293293
r7640r7641
320320      dsp_reset(device);
321321
322322   /* Here we check for keys on/off.  Docs say that successive writes to KON/KOF
323   must be separated by at least 2 Ts periods or risk being neglected.
324   Therefore DSP only looks at these during an update, and not at the time of
325   the write.  Only need to do this once however, since the regs haven't
326   changed over the whole period we need to catch up with. */
323    must be separated by at least 2 Ts periods or risk being neglected.
324    Therefore DSP only looks at these during an update, and not at the time of
325    the write.  Only need to do this once however, since the regs haven't
326    changed over the whole period we need to catch up with. */
327327#ifdef DBG_KEY
328328   spc700->dsp_regs[0x4c] &= mask;
329329#endif
r7640r7641
332332   spc700->dsp_regs[0x7c] &= ~spc700->dsp_regs[0x4c];
333333
334334   /* Question: what is the expected behavior when pitch modulation is enabled on
335   voice 0?  Jurassic Park 2 does this.  For now, using outx of zero for first
336   voice. */
335    voice 0?  Jurassic Park 2 does this.  For now, using outx of zero for first
336    voice. */
337337   outx = 0;
338338
339339   /* Same table for noise and envelope */
r7640r7641
377377         vp->mixfrac    = 3 * 4096;
378378
379379         /* NOTE: Real SNES does *not* appear to initialize the envelope
380         counter to anything in particular.  The first cycle always seems to
381         come at a random time sooner than expected; as yet, I have been
382         unable to find any pattern.  I doubt it will matter though, so
383         we'll go ahead and do the full time for now. */
380            counter to anything in particular.  The first cycle always seems to
381            come at a random time sooner than expected; as yet, I have been
382            unable to find any pattern.  I doubt it will matter though, so
383            we'll go ahead and do the full time for now. */
384384         vp->envcnt   = CNT_INIT;
385385         vp->envstate = ATTACK;
386386      }
r7640r7641
419419
420420#ifndef NO_PMOD
421421      /* Pitch mod uses OUTX from last voice for this one.  Luckily we haven't
422      modified OUTX since it was used for last voice. */
422        modified OUTX since it was used for last voice. */
423423      if (spc700->dsp_regs[0x2d] & m)
424424      {
425425#ifdef DBG_PMOD
r7640r7641
436436         for ( ; vp->mixfrac >= 0; vp->mixfrac -= 4096)
437437         {
438438            /* This part performs the BRR decode 'on-the-fly'.  This is more
439            correct than the old way, which could be fooled if the data and/or
440            the loop point changed while the sample was playing, or if the BRR
441            decode didn't produce the same result every loop because of the
442            filters.  The event interface still has no chance of keeping up
443            with those kinds of tricks, though. */
439                correct than the old way, which could be fooled if the data and/or
440                the loop point changed while the sample was playing, or if the BRR
441                decode didn't produce the same result every loop because of the
442                filters.  The event interface still has no chance of keeping up
443                with those kinds of tricks, though. */
444444            if (!vp->header_cnt)
445445            {
446446               if (vp->end & 1)
447447               {
448448                  /* Docs say ENDX bit is set when decode of block with source
449                  end flag set is done.  Does this apply to looping samples?
450                  Some info I've seen suggests yes. */
449                        end flag set is done.  Does this apply to looping samples?
450                        Some info I've seen suggests yes. */
451451                  spc700->dsp_regs[0x7c] |= m;
452452                  if (vp->end & 2)
453453                  {
r7640r7641
507507#endif
508508
509509            /* For invalid ranges (D,E,F): if the nybble is negative, the result
510            is F000.  If positive, 0000.  Nothing else like previous range,
511            etc. seems to have any effect.  If range is valid, do the shift
512            normally.  Note these are both shifted right once to do the filters
513            properly, but the output will be shifted back again at the end. */
510                is F000.  If positive, 0000.  Nothing else like previous range,
511                etc. seems to have any effect.  If range is valid, do the shift
512                normally.  Note these are both shifted right once to do the filters
513                properly, but the output will be shifted back again at the end. */
514514            if (vp->range <= 0xc)
515515            {
516516               outx = (outx << vp->range) >> 1;
517517            }
518             else
518            else
519519            {
520520               outx &= ~0x7ff;
521521
r7640r7641
581581         else
582582         {
583583         /* Perform 4-Point Gaussian interpolation.  Take an approximation of a
584         Gaussian bell-curve, and move it through the sample data at a rate
585         determined by the pitch.  The sample output at any given time is
586         the sum of the products of each input sample point with the value
587         of the bell-curve corresponding to that point. */
584            Gaussian bell-curve, and move it through the sample data at a rate
585            determined by the pitch.  The sample output at any given time is
586            the sum of the products of each input sample point with the value
587            of the bell-curve corresponding to that point. */
588588         vl  = vp->mixfrac >> 4;
589589         vr  = ((G4[-vl] * vp->sampbuf[vp->sampptr]) >> 11 ) & ~1;
590590         vr += ((G3[-vl] * vp->sampbuf[(vp->sampptr + 1) & 3]) >> 11) & ~1;
591591         vr += ((G2[vl] * vp->sampbuf[(vp->sampptr + 2) & 3]) >> 11 ) & ~1;
592592
593593         /* This is to do the wrapping properly.  Based on my tests with the
594         SNES, it appears clipping is done only if it is the fourth addition
595         that would cause a wrap.  If it has already wrapped before the
596         fourth addition, it is not clipped. */
594            SNES, it appears clipping is done only if it is the fourth addition
595            that would cause a wrap.  If it has already wrapped before the
596            fourth addition, it is not clipped. */
597597         vr  = (signed short)vr;
598598         vr += ((G1[vl] * vp->sampbuf[(vp->sampptr + 3) & 3]) >> 11) & ~1;
599599
r7640r7641
643643
644644#ifndef NO_ECHO
645645   /* Perform echo.  First, read mem at current location, and put those samples
646      into the FIR filter queue. */
646    into the FIR filter queue. */
647647#ifdef DBG_ECHO
648648   logerror("Echo delay=%dms, feedback=%d%%\n", spc700->dsp_regs[0x7d] * 16,
649649      ((signed char)spc700->dsp_regs[0x0d] * 100) / 0x7f);
r7640r7641
766766
767767
768768/*-------------------------------------------------
769 advance_envelope
769 advance_envelope
770770
771 Run envelope step & return ENVX. v is the voice
771 Run envelope step & return ENVX. v is the voice
772772 to process envelope for.
773773-------------------------------------------------*/
774774
r7640r7641
785785   if (spc700->voice_state[v].envstate == RELEASE)
786786   {
787787      /* Docs: "When in the state of "key off". the "click" sound is prevented
788      by the addition of the fixed value 1/256"  WTF???  Alright, I'm going
789      to choose to interpret that this way:  When a note is keyed off, start
790      the RELEASE state, which subtracts 1/256th each sample period (32kHz).
791      Note there's no need for a count because it always happens every
792      update. */
788        by the addition of the fixed value 1/256"  WTF???  Alright, I'm going
789        to choose to interpret that this way:  When a note is keyed off, start
790        the RELEASE state, which subtracts 1/256th each sample period (32kHz).
791        Note there's no need for a count because it always happens every
792        update. */
793793      envx -= 0x8;                    /* 0x8 / 0x800 = 1/256th        */
794794      if (envx <= 0)
795795      {
r7640r7641
817817      {
818818      case ATTACK:
819819         /* Docs are very confusing.  "AR is multiplied by the fixed value
820         1/64..."  I believe it means to add 1/64th to ENVX once every
821         time ATTACK is updated, and that's what I'm going to implement. */
820            1/64..."  I believe it means to add 1/64th to ENVX once every
821            time ATTACK is updated, and that's what I'm going to implement. */
822822         t = adsr1 & 0x0f;
823823
824824               if (t == 0x0f)
r7640r7641
855855
856856      case DECAY:
857857         /* Docs: "DR... [is multiplied] by the fixed value 1-1/256."
858         Well, at least that makes some sense.  Multiplying ENVX by
859         255/256 every time DECAY is updated. */
858            Well, at least that makes some sense.  Multiplying ENVX by
859            255/256 every time DECAY is updated. */
860860         cnt -= ENVCNT[((adsr1 >> 3) & 0x0e) + 0x10];
861861
862862         if (cnt <= 0)
r7640r7641
877877
878878      case SUSTAIN:
879879         /* Docs: "SR [is multiplied] by the fixed value 1-1/256."
880         Multiplying ENVX by 255/256 every time SUSTAIN is updated. */
880            Multiplying ENVX by 255/256 every time SUSTAIN is updated. */
881881#ifdef DBG_ENV
882882         if (ENVCNT[SR(v)] == 0)
883883            logerror("ENV voice %d: envx=%03X, state=SUSTAIN, zero rate\n", v, envx);
r7640r7641
906906   else
907907   {
908908      /* GAIN mode is set
909      Note: if the game switches between ADSR and GAIN modes partway
910      through, should the count be reset, or should it continue from
911      where it was?  Does the DSP actually watch for that bit to
912      change, or does it just go along with whatever it sees when it
913      performs the update?  I'm going to assume the latter and not
914      update the count, unless I see a game that obviously wants the
915      other behavior.  The effect would be pretty subtle, in any case.
916      */
909        Note: if the game switches between ADSR and GAIN modes partway
910        through, should the count be reset, or should it continue from
911        where it was?  Does the DSP actually watch for that bit to
912        change, or does it just go along with whatever it sees when it
913        performs the update?  I'm going to assume the latter and not
914        update the count, unless I see a game that obviously wants the
915        other behavior.  The effect would be pretty subtle, in any case.
916        */
917917      t = spc700->dsp_regs[(v << 4) + 7];
918918
919919      if (t < 0x80)
r7640r7641
987987
988988         case 7:
989989            /* Docs: "Increase (bent line): Addition of the constant
990                      1/64 up to .75 of the constaint <sic> 1/256 from .75 to 1." */
990                    1/64 up to .75 of the constaint <sic> 1/256 from .75 to 1." */
991991            cnt -= ENVCNT[t & 0x1f];
992992
993993            if (cnt > 0)
r7640r7641
10521052
10531053
10541054/***************************
1055         I/O for DSP       
1055         I/O for DSP
10561056 ***************************/
10571057
10581058static READ8_DEVICE_HANDLER( snes_dsp_io_r )
r7640r7641
10891089}
10901090
10911091/***************************
1092       I/O for SPC700       
1092       I/O for SPC700
10931093 ***************************/
10941094
10951095READ8_DEVICE_HANDLER( spc_io_r )
r7640r7641
11921192      case 0xa:      /* Timer 0 */
11931193      case 0xb:      /* Timer 1 */
11941194      case 0xc:      /* Timer 2 */
1195         if (data == 0)
1195         if (data == 0)
11961196            data = 255;
11971197         break;
11981198      case 0xd:      /* Counter 0 */
r7640r7641
12491249UINT8 *spc_get_ram( running_device *device )
12501250{
12511251   snes_sound_state *spc700 = get_safe_token(device);
1252   
1252
12531253   return spc700->ram;
12541254}
12551255
r7640r7641
12961296      state_save_register_device_item(device, v, spc700->voice_state[v].mixfrac);
12971297      state_save_register_device_item(device, v, spc700->voice_state[v].on_cnt);
12981298      state_save_register_device_item(device, v, spc700->voice_state[v].pitch);
1299       state_save_register_device_item(device, v, spc700->voice_state[v].range);
1300       state_save_register_device_item(device, v, spc700->voice_state[v].samp_id);
1299      state_save_register_device_item(device, v, spc700->voice_state[v].range);
1300      state_save_register_device_item(device, v, spc700->voice_state[v].samp_id);
13011301      state_save_register_device_item(device, v, spc700->voice_state[v].sampptr);
13021302      state_save_register_device_item(device, v, spc700->voice_state[v].smp1);
13031303      state_save_register_device_item(device, v, spc700->voice_state[v].smp2);
src/mame/audio/taito_zm.c
r7640r7641
1919   AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mn10200", 0)
2020   AM_RANGE(0x400000, 0x40ffff) AM_RAM
2121   AM_RANGE(0x800000, 0x800fff) AM_DEVREADWRITE("zsg2", zsg2_r, zsg2_w)
22   AM_RANGE(0xe00000, 0xe000ff) AM_RAM   // main CPU comms?
22   AM_RANGE(0xe00000, 0xe000ff) AM_RAM   // main CPU comms (1fbe0xxx on FX-1B main CPU, banked with eeprom - raystorm writes command at PC=80015240)
2323   AM_RANGE(0xc00000, 0xc00001) AM_RAM   // TMS57002 comms
2424ADDRESS_MAP_END
2525
r7640r7641
5454   MDRV_CPU_ADD("mn10200", MN10200, 25000000/2)
5555   MDRV_CPU_PROGRAM_MAP(taitozoom_map)
5656   MDRV_CPU_IO_MAP(taitozoom_io_map)
57   MDRV_CPU_VBLANK_INT("screen", irq0_line_pulse)
5758
5859   // we assume the parent machine has created lspeaker/rspeaker
5960   MDRV_SOUND_ADD("zsg2", ZSG2, 25000000/2)
src/mame/machine/snessdd1.c
r7640r7641
582582   {
583583      case 0x4804:
584584         return (snes_sdd1.mmc[0] >> 20) & 7;
585         break;
586585      case 0x4805:
587586         return (snes_sdd1.mmc[1] >> 20) & 7;
588         break;
589587      case 0x4806:
590588         return (snes_sdd1.mmc[2] >> 20) & 7;
591         break;
592589      case 0x4807:
593590         return (snes_sdd1.mmc[3] >> 20) & 7;
594         break;
595591   }
596592
597593   return 0xff;
src/mame/machine/twincobr.c
r7640r7641
327327   dsp_addr_w = 0;
328328   main_ram_seg = 0;
329329   dsp_execute = 0;
330   fsharkbt_8741 = -1;         /* Reset the Flying Shark Bootleg MCU */
331330   twincobr_dsp_BIO = CLEAR_LINE;
332331}
332MACHINE_RESET( fsharkbt )
333{
334   MACHINE_RESET_CALL(twincobr);
335   fsharkbt_8741 = -1;         /* Reset the Flying Shark Bootleg MCU */
336}
337
333338void twincobr_driver_savestate(running_machine *machine)
334339{
335340   state_save_register_global(machine, toaplan_main_cpu);
src/mame/machine/n64.c
r7640r7641
16661666      case 0x03:
16671667      {
16681668         UINT32 address, checksum;
1669         int i;
16701669         /*mame_printf_debug("Write to mempack, rlength = %d, slength = %d\n", rlength, slength);
16711670            for (i=0; i < slength; i++)
16721671            {
src/mame/machine/snes.c
r7640r7641
301301   attoseconds_t refresh;
302302
303303   visarea.min_x = visarea.min_y = 0;
304   visarea.max_y = snes_ppu.beam.last_visible_line * snes_ppu.interlace - 1;
304   visarea.max_y = snes_ppu.beam.last_visible_line*snes_ppu.interlace - 1;
305305   visarea.max_x = (SNES_SCR_WIDTH * 2) - 1;
306306
307307   // fixme: should compensate for SNES_DBG_video
308   if (snes_ppu.mode == 5 || snes_ppu.mode == 6 || snes_ppu.pseudo_hires)
308   if (snes_ppu.mode == 5 || snes_ppu.mode == 6 )
309309      state->htmult = 2;
310310   else
311311      state->htmult = 1;
r7640r7641
317317      refresh = HZ_TO_ATTOSECONDS(DOTCLK_PAL) * SNES_HTOTAL * SNES_VTOTAL_PAL;
318318
319319   if ((snes_ram[STAT78] & 0x10) == SNES_NTSC)
320      video_screen_configure(machine->primary_screen, SNES_HTOTAL * 2, SNES_VTOTAL_NTSC * snes_ppu.interlace, &visarea, refresh);
320      video_screen_configure(machine->primary_screen, SNES_HTOTAL*2, SNES_VTOTAL_NTSC*snes_ppu.interlace, &visarea, refresh);
321321   else
322      video_screen_configure(machine->primary_screen, SNES_HTOTAL * 2, SNES_VTOTAL_PAL * snes_ppu.interlace, &visarea, refresh);
322      video_screen_configure(machine->primary_screen, SNES_HTOTAL*2, SNES_VTOTAL_PAL*snes_ppu.interlace, &visarea, refresh);
323323}
324324
325325static READ8_HANDLER( snes_open_bus_r )
src/mame/machine/namcos2.c
r7640r7641
138138
139139NVRAM_HANDLER( namcos2 )
140140{
141   if( read_or_write )
142   {
143      mame_fwrite( file, namcos2_eeprom, namcos2_eeprom_size );
144   }
141   if (read_or_write)
142      mame_fwrite(file, namcos2_eeprom, namcos2_eeprom_size);
143   else if (file != NULL)
144      mame_fread(file, namcos2_eeprom, namcos2_eeprom_size);
145   else if (memory_region_length(machine, "nvram") == namcos2_eeprom_size)
146      memcpy(namcos2_eeprom, memory_region(machine, "nvram"), namcos2_eeprom_size);
145147   else
146148   {
147      if( file )
149      if( namcos2_gametype == NAMCOS21_STARBLADE )
148150      {
149         mame_fread( file, namcos2_eeprom, namcos2_eeprom_size );
151         memset(namcos2_eeprom, 0x00, namcos2_eeprom_size);
150152      }
151153      else
152154      {
153         int pat = 0xff; /* default */
154         if( namcos2_gametype == NAMCOS21_STARBLADE )
155         {
156            pat = 0x00;
157         }
158         memset( namcos2_eeprom, pat, namcos2_eeprom_size );
155         memset(namcos2_eeprom, 0xff, namcos2_eeprom_size);
159156      }
160157   }
161158}
162159
160
161
163162WRITE16_HANDLER( namcos2_68k_eeprom_w ){
164163   if( ACCESSING_BITS_0_7 )
165164   {
src/mame/machine/kaneko16.c
r7640r7641
20402040   for (x=0;x<numregions;x++)
20412041   {
20422042      UINT8* tmpdstram = auto_alloc_array(machine, UINT8, 0x2000);
2043#if CALC3_VERBOSE_OUTPUT
20432044      int length;
2045#endif
2046
20442047      memset(tmpdstram, 0x00,0x2000);
2045      length = calc3_decompress_table(machine, x, tmpdstram, 0);
20462048
20472049#if CALC3_VERBOSE_OUTPUT
2050      length = calc3_decompress_table(machine, x, tmpdstram, 0);
20482051      // dump to file
20492052      if (length)
20502053      {
src/mame/mamedriv.c
r7640r7641
278278   DRIVER( mrkougar2 )   /* (c) 1984 ATW */
279279   DRIVER( mrkougb )   /* bootleg */
280280   DRIVER( mrkougb2 )   /* bootleg */
281   DRIVER( hotshock )   /* (c) 1982 E.G. Felaco */
281   DRIVER( hotshock )   /* (c) 1982 E.G. Felaco (Domino license) */
282   DRIVER( hotshockb )   /* bootleg */
282283   DRIVER( conquer )   /* (c) 1982 ???? */
283284   DRIVER( hunchbks )   /* (c) 1983 Century */
284285   DRIVER( hncholms )   /* (c) 1984 Century */
r7640r7641
819820   DRIVER( cosmogngj )   /* (c) 1991 (Japan) */
820821   DRIVER( bubbletr )   /* (c) 1992 */
821822   DRIVER( finalap3 )   /* 92.9  Final Lap 3 */
823   DRIVER( finalap3a )   /* 92.9  Final Lap 3 */
822824   DRIVER( finalap3j )   /* 92.9  Final Lap 3 */
823825   DRIVER( luckywld )   /* (c) 1992 */
824826   DRIVER( luckywldj )   /* (c) 1992 */
r7640r7641
833835   /* Namco FL games */
834836   DRIVER( speedrcr )   /* (c) 1995 */
835837   DRIVER( finalapr )   /* (c) 1995 */
836   DRIVER( finalaprb )   /* (c) 1995 */
838   DRIVER( finalaprj )   /* (c) 1995 */
837839   DRIVER( finalapro )   /* (c) 1995 */
838840
839841   /* Namco NA-1 / NA-2 System games */
r7640r7641
888890   DRIVER( starblad )   /* (c) 1991 */
889891   DRIVER( driveyes )   /* (c) 1992? */
890892            /* 1992, ShimDrive */
893   DRIVER( aircomb )   /* (c) 1992 (US) */
891894   DRIVER( aircombj )   /* (c) 1992 (Japan) */
892   DRIVER( aircombu )   /* (c) 1992 (US) */
893895   DRIVER( cybsled )   /* (c) 1993 */
894896   DRIVER( cybsledj )   /* (c) 1993 */
895897
r7640r7641
925927   DRIVER( aquajet )   /* (c) 1996 */
926928
927929   /* Namco System 23 */
928   DRIVER( rapidrvr )   /* (c) 1997 */
929   DRIVER( finlflng )   /* (c) 1997 */
930   DRIVER( motoxgo )   /* (c) 1997 */
931   DRIVER( timecrs2 )   /* (c) 1997 */
932   DRIVER( timecrs2b )   /* (c) 1997 */
933   DRIVER( timecrs2c )   /* (c) 1997 */
934   DRIVER( panicprk )   /* (c) 1998 */
935   DRIVER( gunwars )   /* (c) 1998 */
936   DRIVER( 500gp )      /* (c) 1999 */
937   DRIVER( finfurl2 )   /* (c) 1999 */
938   DRIVER( finfurl2j )   /* (c) 1999 */
930   DRIVER( finlflng )   /* July 1997 */
931   DRIVER( motoxgo )   /* November 1997 */
932   DRIVER( rapidrvr )   /* December 1997 */
933   DRIVER( rapidrvr2 )   /* December 1997 */
934   DRIVER( downhill )   /* March 1998 */
935   DRIVER( timecrs2 )   /* April 1998 */
936   DRIVER( timecrs2b )   /* April 1998 */
937   DRIVER( timecrs2c )   /* April 1998 */
938   DRIVER( panicprk )   /* May 1998 */
939            /* Race On - September 1998 */
940   DRIVER( gunwars )   /* September 1998 */
941            /* Angler King - March 1999 */
942   DRIVER( 500gp )      /* March 1999 */
943   DRIVER( finfurl2 )   /* March 1999 */
944   DRIVER( finfurl2j )   /* March 1999 */
945            /* Guitar Jam - July 1999 */
946   DRIVER( crszone )   /* Crisis Zone - December 1999 */
939947
940948   /* Namco System 246 */
941949   DRIVER( sys246 )
r7640r7641
23802388   DRIVER( plegends )   /* (c) 1994 Atlus */
23812389   DRIVER( plegendsj )   /* (c) 1994 Atlus */
23822390   DRIVER( mazinger )   /* (c) 1994 Banpresto (country is in EEPROM) */
2391   DRIVER( mazingerj )   /* (c) 1994 Banpresto (country is in EEPROM) */
23832392   DRIVER( donpachi )   /* (c) 1995 Atlus/Cave */
23842393   DRIVER( donpachij )   /* (c) 1995 Atlus/Cave */
23852394   DRIVER( donpachikr )   /* (c) 1995 Atlus/Cave */
r7640r7641
23872396   DRIVER( metmqstr )   /* (c) 1995 Banpresto / Pandorabox */
23882397   DRIVER( nmaster )   /* (c) 1995 Banpresto / Pandorabox */
23892398   DRIVER( sailormn )   /* (c) 1995 Banpresto (country is in EEPROM) */
2399   DRIVER( sailormnu )   /* (c) 1995 Banpresto (country is in EEPROM) */
2400   DRIVER( sailormnj )   /* (c) 1995 Banpresto (country is in EEPROM) */
2401   DRIVER( sailormnk )   /* (c) 1995 Banpresto (country is in EEPROM) */
2402   DRIVER( sailormnt )   /* (c) 1995 Banpresto (country is in EEPROM) */
2403   DRIVER( sailormnh )   /* (c) 1995 Banpresto (country is in EEPROM) */
23902404   DRIVER( sailormno )   /* (c) 1995 Banpresto (country is in EEPROM) */
2405   DRIVER( sailormnou )/* (c) 1995 Banpresto (country is in EEPROM) */
2406   DRIVER( sailormnoj )/* (c) 1995 Banpresto (country is in EEPROM) */
2407   DRIVER( sailormnok )/* (c) 1995 Banpresto (country is in EEPROM) */
2408   DRIVER( sailormnot )/* (c) 1995 Banpresto (country is in EEPROM) */
2409   DRIVER( sailormnoh )/* (c) 1995 Banpresto (country is in EEPROM) */
23912410   DRIVER( agallet )   /* (c) 1996 Banpresto / Gazelle (country is in EEPROM) */
2411   DRIVER( agalletu )   /* (c) 1996 Banpresto / Gazelle (country is in EEPROM) */
2412   DRIVER( agalletj )   /* (c) 1996 Banpresto / Gazelle (country is in EEPROM) */
2413   DRIVER( agalletk )   /* (c) 1996 Banpresto / Gazelle (country is in EEPROM) */
2414   DRIVER( agallett )   /* (c) 1996 Banpresto / Gazelle (country is in EEPROM) */
2415   DRIVER( agalleth )   /* (c) 1996 Banpresto / Gazelle (country is in EEPROM) */
23922416   DRIVER( hotdogst )   /* (c) 1996 Marble */
23932417   DRIVER( ddonpach )   /* (c) 1997 Atlus/Cave */
23942418   DRIVER( ddonpachj )   /* (c) 1997 Atlus/Cave */
r7640r7641
24032427   DRIVER( gaia )      /* (c) 1999 Noise Factory */
24042428   DRIVER( theroes )   /* (c) 2001 Primetek Investments */
24052429   DRIVER( korokoro )   /* (c) 1999 Takumi */
2430   DRIVER( crusherm )   /* (c) 1999 Takumi */
2431   DRIVER( tjumpman )   /* (c) 1999 Namco */
24062432
24072433   /* Kyugo games */
24082434   /* Kyugo only made four games: Repulse, Flash Gal, SRD Mission and Air Wolf. */
r7640r7641
30033029   DRIVER( ts2 )      /* Battle Arena Toshinden 2 (USA 951124) */
30043030   DRIVER( ts2j )      /* Battle Arena Toshinden 2 (JAPAN 951124) */
30053031   DRIVER( starglad )   /* Star Gladiator (USA 960627) */
3032   DRIVER( stargladj )   /* Star Gladiator (JAPAN 960627) */
30063033   DRIVER( sfex )      /* Street Fighter EX (EURO 961219) */
30073034   DRIVER( sfexu )      /* Street Fighter EX (USA 961219) */
30083035   DRIVER( sfexa )      /* Street Fighter EX (ASIA 961219) */
r7640r7641
42744301   DRIVER( fvipers2 )   /* 1998.04 Fighting Vipers 2 */
42754302   DRIVER( vs298 )      /* 1998.05 Virtua Striker 2 ver.98*/
42764303   DRIVER( vs299 )      /* 1998.12 Virtual Striker 2 ver.99 */
4304   DRIVER( vs299a )   /* 1999.?? Virtual Striker 2 ver.99 (rev A) */
42774305   DRIVER( vs2v991 )   /* 1999.?? Virtual Striker 2 ver.99.1 */
42784306   DRIVER( von254g )   /* 1999.05 Dennou Senki Virtual-On Oratorio Tangram ver.5.4 */
42794307
r7640r7641
44194447   DRIVER( mt_sonic )   /* 52 */
44204448   DRIVER( mt_sonia )   /* ^^ */
44214449   DRIVER( mt_fshrk )   /* 53 */
4422                  /* 54 */
4450   DRIVER( mt_spman )   /* 54 */
44234451                  /* 55 */
44244452                  /* 56 */
44254453   DRIVER( mt_gaxe2 )   /* 57 */
r7640r7641
67476775   /* Stern "Berzerk hardware" games */
67486776   DRIVER( berzerk )   /* (c) 1980 */
67496777   DRIVER( berzerk1 )   /* (c) 1980 */
6778   DRIVER( berzerkg )   /* (c) 1980 */
67506779   DRIVER( frenzy )   /* (c) 1982 */
67516780   DRIVER( moonwarp )   /* (c) 1982 - prototype */
67526781
r7640r7641
71767205   DRIVER( raiden2f )   /* (c) 1993 Seibu Kaihatsu */
71777206   DRIVER( raidndx )   /* (c) 1993 Seibu Kaihatsu */
71787207   DRIVER( raidndxj )   /* (c) 1993 Seibu Kaihatsu */
7208   DRIVER( raidndxu )   /* (c) 1993 Seibu Kaihatsu + Fabtek license */
71797209   DRIVER( raidndxm )   /* (c) 1993 Seibu Kaihatsu + Metrotainment license */
7180   DRIVER( raidndxt )   /* (c) 1993 Seibu Kaihatsu + Tuning license*/
7210   DRIVER( raidndxt )   /* (c) 1993 Seibu Kaihatsu + Tuning license */
71817211   DRIVER( zeroteam )   /* (c) 1993 Seibu Kaihatsu */
71827212   DRIVER( zeroteama )   /* (c) 1993 Seibu Kaihatsu */
71837213   DRIVER( zeroteamb )   /* (c) 1993 Seibu Kaihatsu */
r7640r7641
79928022   DRIVER( daitoa )   /* (c) 1995 */
79938023   DRIVER( dokyusei )   /* (c) 1995 Make Software / Elf / Media Trading */
79948024   DRIVER( dokyusp )   /* (c) 1995 Make Software / Elf / Media Trading */
8025   DRIVER( msgogo )   /* (c) 1995 Metro */
79958026   DRIVER( puzzli )   /* (c) 1995 Metro / Banpresto */
79968027   DRIVER( 3kokushi )   /* (c) 1996 Mitchell */
79978028   DRIVER( pururun )   /* (c) 1995 Metro / Banpresto */
r7640r7641
80038034   DRIVER( gakusai2 )   /* (c) 1998 MakeSoft */
80048035   DRIVER( blzntrnd )   /* (c) 1994 Human Amusement */
80058036   DRIVER( gstrik2 )   /* (c) 1996 Human Amusement */
8006   DRIVER( gstrik2e )
8037   DRIVER( gstrik2j )
80078038   DRIVER( hyprduel )   /* (c) 1993 Technosoft (World) */
80088039   DRIVER( hyprdelj )   /* (c) 1993 Technosoft (Japan) */
80098040   DRIVER( magerror )   /* (c) 1994 Technosoft (Japan) (Arcade TV Game List - P.100, Left, 13 from Bottom) */
r7640r7641
83138344
83148345   /* IGS PGM System Games */
83158346   DRIVER( pgm )
8316   DRIVER( orlegend )   /* (c) 1997 */
8317   DRIVER( orlegende )   /* (c) 1997 */
8318   DRIVER( orlegendc )   /* (c) 1997 */
8319   DRIVER( orlegend111c )   /* (c) 1997 */
8320   DRIVER( orlegend105k )   /* (c) 1997 */
8321   DRIVER( drgw2 )      /* (c) 1997 */
8322   DRIVER( drgw2c )   /* (c) 1997 */
8323   DRIVER( drgw2j )   /* (c) 1997 */
8324   DRIVER( drgw3 )      /* (c) 1998 */
8325   DRIVER( drgw3k )   /* (c) 1998 */
8326   DRIVER( kov )      /* (c) 1999 */
8327   DRIVER( kovplus )   /* (c) 1999 */
8328   DRIVER( kovplusa )   /* (c) 1999 */
8329   DRIVER( kov115 )   /* (c) 1999 */
8330   DRIVER( kovj )      /* (c) 1999 */
8331   DRIVER( kovsh )      /* (c) 1999 */
8332   DRIVER( photoy2k )   /* (c) 1999 */
8333   DRIVER( raf102j )   /* (c) 1999 */
8334   DRIVER( killbld )   /* (c) 1998 */
8335   DRIVER( killbldt )   /* (c) 1998 */
8336   DRIVER( puzlstar )   /* (c) 1999 */
8337   DRIVER( olds )      /* (c) 1999 */
8338   DRIVER( olds100 )   /* (c) 1999 */
8339   DRIVER( olds100a )   /* (c) 1999 */
8340   DRIVER( kov2 )      /* (c) 2000 */
8341   DRIVER( kov2106 )   /* (c) 2000 */
8342   DRIVER( kov2p )      /* (c) 2000 */
8343   DRIVER( kov2p205 )   /* (c) 2000 */
8344   DRIVER( ddp2 )      /* (c) 2001 */
8345   DRIVER( ddp2a )      /* (c) 2001 */
8346   DRIVER( puzzli2 )   /* (c) 2001 */
8347   DRIVER( martmast )   /* (c) 2001 */
8348   DRIVER( martmastc )   /* (c) 2001 */
8349   DRIVER( theglad )   /* (c) 2001 */
8350   DRIVER( theglada )   /* (c) 2001 */
8351   DRIVER( dmnfrnt )   /* (c) 2002 */
8352   DRIVER( dmnfrnta )   /* (c) 2002 */
8347   DRIVER( orlegend )    /* (c) 1997 */
8348   DRIVER( orlegende )    /* (c) 1997 */
8349   DRIVER( orlegendc )    /* (c) 1997 */
8350   DRIVER( orlegend111c )    /* (c) 1997 */
8351   DRIVER( orlegend105k )    /* (c) 1997 */
8352   DRIVER( drgw2 )        /* (c) 1997 */
8353   DRIVER( drgw2c )    /* (c) 1997 */
8354   DRIVER( drgw2j )    /* (c) 1997 */
8355   DRIVER( drgw3 )        /* (c) 1998 */
8356   DRIVER( drgw3k )    /* (c) 1998 */
8357   DRIVER( kov )        /* (c) 1999 */
8358   DRIVER( kovplus )    /* (c) 1999 */
8359   DRIVER( kovplusa )    /* (c) 1999 */
8360   DRIVER( kov115 )    /* (c) 1999 */
8361   DRIVER( kov100 )    /* (c) 1999 */
8362   DRIVER( kovsh )        /* (c) 1999 */
8363   DRIVER( photoy2k )    /* (c) 1999 */
8364   DRIVER( photoy2k102 )/* (c) 1999 */
8365   DRIVER( killbld )    /* (c) 1998 */
8366   DRIVER( killbld104 )/* (c) 1998 */
8367   DRIVER( puzlstar )    /* (c) 1999 */
8368   DRIVER( olds )        /* (c) 1999 */
8369   DRIVER( olds100 )    /* (c) 1999 */
8370   DRIVER( olds100a )    /* (c) 1999 */
8371   DRIVER( kov2 )        /* (c) 2000 */
8372   DRIVER( kov2106 )    /* (c) 2000 */
8373   DRIVER( kov2103 )    /* (c) 2000 */
8374   DRIVER( kov2102 )    /* (c) 2000 */
8375   DRIVER( kov2100 )    /* (c) 2000 */
8376   DRIVER( kov2p )        /* (c) 2000 */
8377   DRIVER( kov2p205 )    /* (c) 2000 */
8378   DRIVER( ddp2 )        /* (c) 2001 */
8379   DRIVER( ddp2a )        /* (c) 2001 */
8380   DRIVER( puzzli2 )    /* (c) 2001 */
8381   DRIVER( martmast )    /* (c) 2001 */
8382   DRIVER( martmastc )    /* (c) 2001 */
8383   DRIVER( theglad )    /* (c) 2001 */
8384   DRIVER( theglada )    /* (c) 2001 */
8385   DRIVER( dmnfrnt )    /* (c) 2002 */
8386   DRIVER( dmnfrnta )    /* (c) 2002 */
83538387   DRIVER( kovshp )
83548388   DRIVER( oldsplus )
83558389   DRIVER( killbldp )
r7640r7641
87528786   DRIVER( gt103asx )   /* (c) 1984 Greyhound Electronics */
87538787   DRIVER( reelfun )   /* (c) 1986 Grayhound Electronics */
87548788   DRIVER( findout )   /* (c) 1987 [Elettronolo] */
8789   DRIVER( quizvid )   /* (c) 1986 Greyhound Electronics */
87558790   DRIVER( quiz )      /* (c) 1986 Italian bootleg */
87568791   DRIVER( quiz211 )   /* (c) 1986 Italian bootleg */
87578792   DRIVER( jokpoker )   /* (c) 1982 Greyhound Electronics */
r7640r7641
88808915   DRIVER( vamphalfk )   /* (c) 1999 DanBi & F2 System */
88818916   DRIVER( dquizgo2 )   /* (c) 2000 Semicom */
88828917   DRIVER( misncrft )   /* (c) 2000 Sun */
8918   DRIVER( mrdig )      /* (c) 2000 Sun */
88838919   DRIVER( hidnctch )   /* (c) 1998 Eolith */
88848920   DRIVER( ironfort )   /* (c) 1998 Eolith */
88858921   DRIVER( puzzlekg )   /* (c) 1998 Eolith */
r7640r7641
90439079   /* Funworld */
90449080   DRIVER( jollycrd )   /* (c) 1985 TAB-Austria */
90459081   DRIVER( jolyc3x3 )   /* (c) 1985 TAB-Austria */
9082   DRIVER( jolycmzs )   /* (c) 1993 MZS Tech */
90469083   DRIVER( jolyc980 )   /* (c) 2000 Spale-Soft */
90479084   DRIVER( jolycdev )   /* (c) 1998 TAB/Evona */
90489085   DRIVER( jolyccra )   /* (c) 1985 TAB-Austria */
r7640r7641
90779114   DRIVER( vegasslw )   /* (c) 1993 Funworld */
90789115   DRIVER( vegasfst )   /* (c) 1993 Soft Design */
90799116   DRIVER( vegasfte )   /* (c) 1993 Soft Design */
9117   DRIVER( vegasmil )   /* (c) 1993 Mile */
90809118   DRIVER( jolyjokr )   /* (c) 198? Impera */
90819119   DRIVER( jolyjokra )   /* (c) 198? Impera */
90829120   DRIVER( jolyjokrb )   /* (c) 198? Impera */
9121   DRIVER( multiwin )   /* (c) 1992 Funworld */
90839122   DRIVER( jokercrd )   /* (c) 1993 Vesely Svet */
90849123   DRIVER( mongolnw )   /* 199? bootleg */
90859124   DRIVER( soccernw )   /* 199? bootleg */
90869125   DRIVER( saloon )   /* 199? unknown */
9126   DRIVER( funquiz )   /* (c) 198? Funworld */
90879127   DRIVER( photoply )
90889128
90899129   /* Sandii' */
src/mame/includes/twincobr.h
r7640r7641
11/***************************************************************************
2        Twincobr/Flying shark/Wardner  game hardware from 1986-1987
2        Twincobr/Flying Shark/Wardner  game hardware from 1986-1987
33        -----------------------------------------------------------
44****************************************************************************/
55
66
7#include "video/mc6845.h"
78
9
810/*----------- defined in drivers/wardner.c -----------*/
911
1012extern STATE_POSTLOAD( wardner_restore_bank );
r7640r7641
3335WRITE8_HANDLER(   wardner_coin_dsp_w );
3436
3537MACHINE_RESET( twincobr );
38MACHINE_RESET( fsharkbt );
3639MACHINE_RESET( wardner );
3740
3841extern void twincobr_driver_savestate(running_machine *machine);
r7640r7641
4548
4649
4750/*----------- defined in video/twincobr.c -----------*/
51extern const mc6845_interface twincobr_mc6845_intf;
4852
4953extern void twincobr_flipscreen(running_machine *machine, int flip);
5054extern void twincobr_display(int enable);
r7640r7641
6266WRITE16_HANDLER( twincobr_txoffs_w );
6367WRITE16_HANDLER( twincobr_bgoffs_w );
6468WRITE16_HANDLER( twincobr_fgoffs_w );
65WRITE16_HANDLER( twincobr_crtc_reg_sel_w );
66WRITE16_HANDLER( twincobr_crtc_data_w );
6769WRITE8_HANDLER( wardner_videoram_w );
6870READ8_HANDLER(  wardner_videoram_r );
6971WRITE8_HANDLER( wardner_bglayer_w );
r7640r7641
7577WRITE8_HANDLER( wardner_exscroll_w );
7678READ8_HANDLER(  wardner_sprite_r );
7779WRITE8_HANDLER( wardner_sprite_w );
78WRITE8_HANDLER( wardner_CRTC_reg_sel_w );
79WRITE8_HANDLER( wardner_CRTC_data_w );
8080
8181extern INT32 twincobr_fg_rom_bank;
8282extern INT32 twincobr_bg_ram_bank;
src/mame/includes/dynax.h
r7640r7641
44
55***************************************************************************/
66
7class dynax_state
8{
9public:
10   static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, dynax_state(machine)); }
11
12   dynax_state(running_machine &machine) { }
13
14   // up to 8 layers, 2 images per layer (interleaved on screen)
15   UINT8 *  pixmap[8][2];
16   UINT8 *  ddenlovr_pixmap[8];
17
18   /* irq */
19   void (*update_irq_func)(running_machine *machine);   // some games trigger IRQ at blitter end, some don't
20   UINT8 sound_irq;
21   UINT8 vblank_irq;
22   UINT8 blitter_irq, blitter2_irq;
23   UINT8 soundlatch_irq;
24   UINT8 sound_vblank_irq;
25
26   /* blitters */
27   int blit_scroll_x, blit2_scroll_x;
28   int blit_scroll_y, blit2_scroll_y;
29   int blit_wrap_enable, blit2_wrap_enable;
30   int blit_x, blit_y, blit2_x, blit2_y;
31   int blit_src, blit2_src;
32   int blit_romregion, blit2_romregion;
33   int blit_dest, blit2_dest;
34   int blit_pen, blit2_pen;
35   int blit_palbank, blit2_palbank;
36   int blit_palettes, blit2_palettes;
37   int layer_enable;
38   int blit_backpen;
39
40   int hanamai_layer_half;
41   int hnoridur_layer_half2;
42
43   int extra_scroll_x, extra_scroll_y;
44   int flipscreen;
45
46   int layer_layout;
47
48   const int *priority_table;
49   int hanamai_priority;
50
51   /* ddenlovr blitter (TODO: merge with the above, where possible) */
52   int extra_layers;
53   int ddenlovr_dest_layer;
54   int ddenlovr_blit_flip;
55   int ddenlovr_blit_x;
56   int ddenlovr_blit_y;
57   int ddenlovr_blit_address;
58   int ddenlovr_blit_pen,ddenlovr_blit_pen_mode;
59   int ddenlovr_blitter_irq_flag,ddenlovr_blitter_irq_enable;
60   int ddenlovr_rect_width, ddenlovr_rect_height;
61   int ddenlovr_clip_width, ddenlovr_clip_height;
62   int ddenlovr_line_length;
63   int ddenlovr_clip_ctrl,ddenlovr_clip_x,ddenlovr_clip_y;
64   int ddenlovr_scroll[8*2];
65   int ddenlovr_priority, ddenlovr_priority2;
66   int ddenlovr_bgcolor, ddenlovr_bgcolor2;
67   int ddenlovr_layer_enable, ddenlovr_layer_enable2;
68   int ddenlovr_palette_base[8], ddenlovr_palette_mask[8];
69   int ddenlovr_transparency_pen[8], ddenlovr_transparency_mask[8];
70   int ddenlovr_blit_latch;
71   int ddenlovr_blit_pen_mask;   // not implemented
72   int ddenlovr_blit_rom_bits;         // usually 8, 16 in hanakanz
73   const int *ddenlovr_blit_commands;
74   int ddenlovr_blit_regs[2];
75
76   /* input */
77   UINT8 input_sel, dsw_sel, keyb, coins, hopper;
78
79   /* misc */
80   int hnoridur_bank;
81   UINT8 palette_ram[16*256*2];
82   int palbank;
83   int msm5205next;
84   int resetkludge;
85   int toggle, toggle_cpu1;
86   int yarunara_clk_toggle;
87   UINT8 soundlatch_ack;
88   UINT8 soundlatch_full;
89   UINT8 latch;
90   int rombank;
91   UINT8 tenkai_p5_val;
92   int tenkai_6c, tenkai_70;
93   UINT8 gekisha_val[2];
94   UINT8 gekisha_rom_enable;
95   UINT8 *romptr;
96
97   /* ddenlovr misc (TODO: merge with the above, where possible) */
98   UINT8 palram[0x200];
99   int okibank;
100   UINT8 rongrong_blitter_busy_select;
101
102   UINT16 *dsw_sel16;
103   UINT16 *protection1, *protection2;
104   UINT8 prot_val;
105   UINT16 prot_16;
106   UINT16 quiz365_protection[2];
107
108   UINT16 mmpanic_leds;   /* A led for each of the 9 buttons */
109   UINT8 funkyfig_lockout;
110   UINT8 romdata[2];
111   int palette_index;
112   UINT8 hginga_rombank;
113   UINT8 mjflove_irq_cause;
114   UINT8 daimyojn_palette_sel;
115
116   int irq_count;
117
118
119   /* devices */
120   running_device *maincpu;
121   running_device *soundcpu;
122   running_device *rtc;
123   running_device *ymsnd;
124   running_device *oki;
125   running_device *top_scr;
126   running_device *bot_scr;
127};
128
7129//----------- defined in drivers/dynax.c -----------
8130
9extern UINT8 dynax_blitter_irq,   dynax_blitter2_irq;
10
11131void sprtmtch_update_irq(running_machine *machine);
12132void jantouki_update_irq(running_machine *machine);
13133void mjelctrn_update_irq(running_machine *machine);
r7640r7641
76196//----------- defined in drivers/ddenlovr.c -----------
77197
78198WRITE8_HANDLER( ddenlovr_bgcolor_w );
79
80199WRITE8_HANDLER( ddenlovr_priority_w );
81
82200WRITE8_HANDLER( ddenlovr_layer_enable_w );
83
84201WRITE8_HANDLER( ddenlovr_palette_base_w );
85
86202WRITE8_HANDLER( ddenlovr_palette_mask_w );
87
88203WRITE8_HANDLER( ddenlovr_transparency_pen_w );
89
90204WRITE8_HANDLER( ddenlovr_transparency_mask_w );
91205
92extern UINT8 *ddenlovr_pixmap[8];
93
94206VIDEO_START(ddenlovr);
95207VIDEO_UPDATE(ddenlovr);
96
src/mame/includes/paradise.h
r7640r7641
1
2class paradise_state
3{
4public:
5   static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, paradise_state(machine)); }
6
7   paradise_state(running_machine &machine) { }
8
9   /* memory pointers */
10   UINT8 *  vram_0;
11   UINT8 *  vram_1;
12   UINT8 *  vram_2;
13   UINT8 *  videoram;
14   UINT8 *  paletteram;
15   UINT8 *  spriteram;
16   size_t   spriteram_size;
17
18   /* video-related */
19   tilemap_t *tilemap_0, *tilemap_1, *tilemap_2;
20   bitmap_t *tmpbitmap;
21   UINT8 palbank, priority;
22   int sprite_inc;
23};
24
125/*----------- defined in video/paradise.c -----------*/
226
3extern UINT8 *paradise_vram_0,*paradise_vram_1,*paradise_vram_2;
4extern int paradise_sprite_inc;
5
627WRITE8_HANDLER( paradise_vram_0_w );
728WRITE8_HANDLER( paradise_vram_1_w );
829WRITE8_HANDLER( paradise_vram_2_w );
r7640r7641
1637WRITE8_HANDLER( paradise_palbank_w );
1738
1839VIDEO_START( paradise );
40
1941VIDEO_UPDATE( paradise );
2042VIDEO_UPDATE( torus );
2143VIDEO_UPDATE( madball );
src/mame/includes/snes.h
r7640r7641
2323#define DOTCLK_NTSC   (MCLK_NTSC/4)
2424#define DOTCLK_PAL   (MCLK_PAL/4)
2525
26#define SNES_LAYER_DEBUG  1
26#define SNES_LAYER_DEBUG 
2727
2828/* Debug definitions */
2929#ifdef MAME_DEBUG
src/mame/includes/metro.h
r0r7641
1/*************************************************************************
2
3    Metro Games
4
5*************************************************************************/
6
7class metro_state
8{
9public:
10   static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, metro_state(machine)); }
11
12   metro_state(running_machine &machine) { }
13
14   /* memory pointers */
15   UINT16 *    vram_0;
16   UINT16 *    vram_1;
17   UINT16 *    vram_2;
18   UINT16 *    spriteram;
19   UINT16 *    tiletable;
20   UINT16 *    tiletable_old;
21   UINT16 *    blitter_regs;
22   UINT16 *    scroll;
23   UINT16 *    window;
24   UINT16 *    irq_enable;
25   UINT16 *    irq_levels;
26   UINT16 *    irq_vectors;
27   UINT16 *    rombank;
28   UINT16 *    videoregs;
29   UINT16 *    screenctrl;
30   UINT16 *    input_sel;
31   UINT16 *    k053936_ram;
32
33   size_t      spriteram_size;
34   size_t      tiletable_size;
35
36   int         flip_screen;
37
38   /* video-related */
39   tilemap_t   *k053936_tilemap;
40   int         bg_tilemap_enable[3];
41   int         bg_tilemap_enable16[3];
42   int         bg_tilemap_scrolldx[3];
43
44   int         support_8bpp, support_16x16;
45   int         has_zoom;
46   int         sprite_xoffs, sprite_yoffs;
47
48   /* blitter */
49   int         blitter_bit;
50
51   /* irq_related */
52   int         irq_line;
53   UINT8       requested_int[8];
54   emu_timer   *mouja_irq_timer;
55
56   /* sound related */
57   UINT16      soundstatus;
58   int         porta, portb, busy_sndcpu;
59
60   /* misc */
61   int         gakusai_oki_bank_lo, gakusai_oki_bank_hi;
62
63   /* used by vmetal.c */
64   UINT16 *vmetal_texttileram;
65   UINT16 *vmetal_mid1tileram;
66   UINT16 *vmetal_mid2tileram;
67   UINT16 *vmetal_tlookup;
68   UINT16 *vmetal_videoregs;
69
70   tilemap_t *vmetal_texttilemap;
71   tilemap_t *vmetal_mid1tilemap;
72   tilemap_t *vmetal_mid2tilemap;
73
74   /* devices */
75   running_device *maincpu;
76   running_device *audiocpu;
77   running_device *oki;
78   running_device *ymsnd;
79   running_device *k053936;
80};
81
82
83/*----------- defined in video/metro.c -----------*/
84
85WRITE16_HANDLER( metro_window_w );
86WRITE16_HANDLER( metro_vram_0_w );
87WRITE16_HANDLER( metro_vram_1_w );
88WRITE16_HANDLER( metro_vram_2_w );
89WRITE16_HANDLER( metro_k053936_w );
90
91VIDEO_START( metro_14100 );
92VIDEO_START( metro_14220 );
93VIDEO_START( metro_14300 );
94VIDEO_START( blzntrnd );
95VIDEO_START( gstrik2 );
96
97VIDEO_UPDATE( metro );
98
99void metro_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect);
src/mame/includes/pass.h
r7640r7641
1515
1616/*----------- defined in video/pass.c -----------*/
1717
18WRITE16_HANDLER( pass_fg_videoram_w );
19WRITE16_HANDLER( pass_bg_videoram_w );
20
1821VIDEO_START( pass );
1922VIDEO_UPDATE( pass );
20WRITE16_HANDLER( pass_fg_videoram_w );
21WRITE16_HANDLER( pass_bg_videoram_w );
src/mame/includes/pbaction.h
r0r7641
1/*************************************************************************
2
3    Pinball Action
4
5*************************************************************************/
6
7class pbaction_state
8{
9public:
10   static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pbaction_state(machine)); }
11
12   pbaction_state(running_machine &machine) { }
13
14   /* memory pointers */
15   UINT8 *    videoram;
16   UINT8 *    videoram2;
17   UINT8 *    colorram;
18   UINT8 *    colorram2;
19   UINT8 *    work_ram;
20   UINT8 *    spriteram;
21//  UINT8 *    paletteram;    // currently this uses generic palette handling
22   size_t     spriteram_size;
23
24   /* video-related */
25   tilemap_t  *bg_tilemap, *fg_tilemap;
26   int        scroll;
27
28   /* devices */
29   running_device *maincpu;
30   running_device *audiocpu;
31};
32
33
34/*----------- defined in video/pbaction.c -----------*/
35
36extern WRITE8_HANDLER( pbaction_videoram_w );
37extern WRITE8_HANDLER( pbaction_colorram_w );
38extern WRITE8_HANDLER( pbaction_videoram2_w );
39extern WRITE8_HANDLER( pbaction_colorram2_w );
40extern WRITE8_HANDLER( pbaction_flipscreen_w );
41extern WRITE8_HANDLER( pbaction_scroll_w );
42
43extern VIDEO_START( pbaction );
44extern VIDEO_UPDATE( pbaction );
src/mame/includes/exidy.h
r7640r7641
2424DEVICE_GET_INFO( exidy_sound );
2525#define SOUND_EXIDY DEVICE_GET_INFO_NAME( exidy_sound )
2626
27READ8_HANDLER( exidy_sh6840_r );
2728WRITE8_HANDLER( exidy_sh6840_w );
2829WRITE8_HANDLER( exidy_sfxctrl_w );
2930
src/mame/video/twincobr.c
r7640r7641
22  video.c
33
44  Functions to emulate the video hardware of these machines.
5  Video is 30x40 tiles. (200x320 for Twin Cobra/Flying shark)
6  Video is 40x30 tiles. (320x200 for Wardner)
5  Video is 40x30 tiles. (320x240 for Twin Cobra/Flying shark)
6  Video is 40x30 tiles. (320x240 for Wardner)
77
88  Video has 3 scrolling tile layers (Background, Foreground and Text) and
99  Sprites that have 4 priorities. Lowest priority is "Off".
r7640r7641
4949static tilemap_t *bg_tilemap, *fg_tilemap, *tx_tilemap;
5050
5151
52/* 6845 used for video sync signals only */
53const mc6845_interface twincobr_mc6845_intf =
54{
55   "screen",   /* screen we are acting on */
56   2,         /* number of pixels per video memory address */ /* Horizontal Display programmed to 160 characters */
57   NULL,      /* before pixel update callback */
58   NULL,      /* row update callback */
59   NULL,      /* after pixel update callback */
60   DEVCB_NULL,   /* callback for display state changes */
61   DEVCB_NULL,   /* callback for cursor state changes */
62   DEVCB_NULL,   /* HSYNC callback */
63   DEVCB_NULL,   /* VSYNC callback */
64   NULL      /* update address callback */
65};
66
67
68
5269/***************************************************************************
5370    Callbacks for the TileMap code
5471***************************************************************************/
r7640r7641
171188   tilemap_set_flip_all(machine, (flip ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0));
172189   twincobr_flip_screen = flip;
173190   if (flip) {
174      scroll_x = -58;
175      scroll_y = -29;
176      if (toaplan_main_cpu == 1) scroll_y += 256;      /* Wardner */
191      scroll_x = 0x008;
192      scroll_y = 0x0c5;
177193   }
178194   else {
179      scroll_x = 55;
180      scroll_y = 30;
195      scroll_x = 0x037;
196      scroll_y = 0x01e;
181197   }
182198}
183199
184WRITE16_HANDLER( twincobr_crtc_reg_sel_w )
185{
186//  mc6845_address_w(offset, data);
187}
188200
189WRITE16_HANDLER( twincobr_crtc_data_w )
190{
191//  mc6845_register_w(offset, data);
192}
193
194201WRITE16_HANDLER( twincobr_txoffs_w )
195202{
196203   COMBINE_DATA(&txoffs);
r7640r7641
363370      spriteram16[offset/2] = (spriteram16[offset/2] & 0xff00) | data;
364371}
365372
366WRITE8_HANDLER( wardner_CRTC_reg_sel_w )
367{
368//  mc6845_address_w(offset, data);
369}
370373
371WRITE8_HANDLER( wardner_CRTC_data_w )
372{
373//  mc6845_register_w(0, data);
374}
375374
376
377375/***************************************************************************
378376    Ugly sprite hack for Wardner when hero is in shop
379377***************************************************************************/
src/mame/video/stvvdp2.c
r7640r7641
52825282{
52835283   switch( STV_VDP2_HRES & 3 )
52845284   {
5285      case 0: return 80; //400-320
5286      case 1: return 104; break; //456-352
5287      case 2: return 160; break; //(400-320)*2
5288      case 3: return 208; break; //(456-352)*2
5285      case 0: return 80;  //400-320
5286      case 1: return 104; //456-352
5287      case 2: return 160; //(400-320)*2
5288      case 3: return 208; //(456-352)*2
52895289   }
52905290
52915291   return 0;
src/mame/video/dynax.c
r7640r7641
3030{
3131   int i;
3232
33   for (i = 0;i < machine->config->total_colors;i++)
33   for (i = 0; i < machine->config->total_colors; i++)
3434   {
35      int x =   (color_prom[i]<<8) + color_prom[0x200+i];
35      int x = (color_prom[i] << 8) + color_prom[0x200 + i];
3636      /* The bits are in reverse order! */
37      int r = BITSWAP8((x >>  0) & 0x1f, 7,6,5, 0,1,2,3,4 );
38      int g = BITSWAP8((x >>  5) & 0x1f, 7,6,5, 0,1,2,3,4 );
39      int b = BITSWAP8((x >> 10) & 0x1f, 7,6,5, 0,1,2,3,4 );
40      palette_set_color_rgb(machine,i,pal5bit(r),pal5bit(g),pal5bit(b));
37      int r = BITSWAP8((x >>  0) & 0x1f, 7, 6, 5, 0, 1, 2, 3, 4);
38      int g = BITSWAP8((x >>  5) & 0x1f, 7, 6, 5, 0, 1, 2, 3, 4);
39      int b = BITSWAP8((x >> 10) & 0x1f, 7, 6, 5, 0, 1, 2, 3, 4);
40      palette_set_color_rgb(machine, i, pal5bit(r), pal5bit(g), pal5bit(b));
4141   }
4242}
4343
r7640r7641
4949
5050***************************************************************************/
5151
52
53static int dynax_blit_scroll_x,      dynax_blit2_scroll_x;
54static int dynax_blit_scroll_y,      dynax_blit2_scroll_y;
55static int dynax_blit_wrap_enable,   dynax_blit2_wrap_enable;
56static int blit_x,blit_y,         blit2_x,blit2_y;
57static int blit_src,            blit2_src;
58static const char * dynax_blit_romregion, *dynax_blit2_romregion;
59static int dynax_blit_dest,         dynax_blit2_dest;
60static int dynax_blit_pen,         dynax_blit2_pen;
61static int dynax_blit_palbank,      dynax_blit2_palbank;
62static int dynax_blit_palettes,      dynax_blit2_palettes;
63static int dynax_layer_enable;
64static int dynax_blit_backpen;
65
66static int hanamai_layer_half;
67static int hnoridur_layer_half2;
68
69static int extra_scroll_x,extra_scroll_y;
70static int flipscreen;
71
7252#define LAYOUT_HANAMAI   0   // 4 layers, interleaved
7353#define LAYOUT_HNORIDUR   1   // same as hanamai but some bits are inverted and layer order is reversed
7454#define LAYOUT_DRGPUNCH   2   // 3 couples of layers, interleaved
7555#define LAYOUT_MJDIALQ2   3   // 2 layers
7656#define LAYOUT_JANTOUKI   4   // 2 x (4 couples of layers, interleaved)
7757
78static int layer_layout;
79
80static void (*update_irq_func)(running_machine *machine);   // some games trigger IRQ at blitter end, some don't
81
82// up to 8 layers, 2 images per layer (interleaved on screen)
83static UINT8 *dynax_pixmap[8][2];
84
85
86
8758WRITE8_HANDLER( dynax_extra_scrollx_w )
8859{
89   extra_scroll_x = data;
60   dynax_state *state = (dynax_state *)space->machine->driver_data;
61   state->extra_scroll_x = data;
9062}
9163
9264WRITE8_HANDLER( dynax_extra_scrolly_w )
9365{
94   extra_scroll_y = data;
66   dynax_state *state = (dynax_state *)space->machine->driver_data;
67   state->extra_scroll_y = data;
9568}
9669
9770
9871/* Destination Pen */
9972WRITE8_HANDLER( dynax_blit_pen_w )
10073{
101   dynax_blit_pen = data;
102   LOG(("P=%02X ",data));
74   dynax_state *state = (dynax_state *)space->machine->driver_data;
75   state->blit_pen = data;
76   LOG(("P=%02X ", data));
10377}
78
10479WRITE8_HANDLER( dynax_blit2_pen_w )
10580{
106   dynax_blit2_pen = data;
107   LOG(("P'=%02X ",data));
81   dynax_state *state = (dynax_state *)space->machine->driver_data;
82   state->blit2_pen = data;
83   LOG(("P'=%02X ", data));
10884}
10985
86
11087/* Destination Layers */
11188WRITE8_HANDLER( dynax_blit_dest_w )
11289{
113   dynax_blit_dest = data;
114   if (layer_layout == LAYOUT_HNORIDUR)
115      dynax_blit_dest = BITSWAP8(dynax_blit_dest ^ 0x0f, 7,6,5,4, 0,1,2,3);
90   dynax_state *state = (dynax_state *)space->machine->driver_data;
91   state->blit_dest = data;
92   if (state->layer_layout == LAYOUT_HNORIDUR)
93      state->blit_dest = BITSWAP8(state->blit_dest ^ 0x0f, 7, 6, 5, 4, 0, 1, 2, 3);
11694
117   LOG(("D=%02X ",data));
95   LOG(("D=%02X ", data));
11896}
97
11998WRITE8_HANDLER( dynax_blit2_dest_w )
12099{
121   dynax_blit2_dest = data;
122   LOG(("D'=%02X ",data));
100   dynax_state *state = (dynax_state *)space->machine->driver_data;
101   state->blit2_dest = data;
102   LOG(("D'=%02X ", data));
123103}
104
124105WRITE8_HANDLER( tenkai_blit_dest_w )
125106{
126   dynax_blit_dest_w(space, 0, BITSWAP8(data, 7,6,5,4, 0,1,2,3));
107   dynax_blit_dest_w(space, 0, BITSWAP8(data, 7, 6, 5, 4, 0, 1, 2, 3));
127108}
128109
110
129111/* Background Color */
130112WRITE8_HANDLER( dynax_blit_backpen_w )
131113{
132   dynax_blit_backpen = data;
133   LOG(("B=%02X ",data));
114   dynax_state *state = (dynax_state *)space->machine->driver_data;
115   state->blit_backpen = data;
116   LOG(("B=%02X ", data));
134117}
135118
119
136120/* Layers 0&1 Palettes (Low Bits) */
137121WRITE8_HANDLER( dynax_blit_palette01_w )
138122{
139   if (layer_layout == LAYOUT_HNORIDUR)
140      dynax_blit_palettes = (dynax_blit_palettes & 0x00ff) | ((data&0x0f)<<12) | ((data&0xf0)<<4);
123   dynax_state *state = (dynax_state *)space->machine->driver_data;
124   if (state->layer_layout == LAYOUT_HNORIDUR)
125      state->blit_palettes = (state->blit_palettes & 0x00ff) | ((data & 0x0f) << 12) | ((data & 0xf0) << 4);
141126   else
142      dynax_blit_palettes = (dynax_blit_palettes & 0xff00) | data;
143   LOG(("P01=%02X ",data));
127      state->blit_palettes = (state->blit_palettes & 0xff00) | data;
128   LOG(("P01=%02X ", data));
144129}
130
145131WRITE8_HANDLER( tenkai_blit_palette01_w )
146132{
147   dynax_blit_palettes = (dynax_blit_palettes & 0xff00) | data;
148   LOG(("P01=%02X ",data));
133   dynax_state *state = (dynax_state *)space->machine->driver_data;
134   state->blit_palettes = (state->blit_palettes & 0xff00) | data;
135   LOG(("P01=%02X ", data));
149136}
150137
138
151139/* Layers 4&5 Palettes (Low Bits) */
152140WRITE8_HANDLER( dynax_blit_palette45_w )
153141{
154   if (layer_layout == LAYOUT_HNORIDUR)
155      dynax_blit2_palettes = (dynax_blit2_palettes & 0x00ff) | ((data&0x0f)<<12) | ((data&0xf0)<<4);
142   dynax_state *state = (dynax_state *)space->machine->driver_data;
143
144   if (state->layer_layout == LAYOUT_HNORIDUR)
145      state->blit2_palettes = (state->blit2_palettes & 0x00ff) | ((data & 0x0f) << 12) | ((data & 0xf0) << 4);
156146   else
157      dynax_blit2_palettes = (dynax_blit2_palettes & 0xff00) | data;
158   LOG(("P45=%02X ",data));
147      state->blit2_palettes = (state->blit2_palettes & 0xff00) | data;
148   LOG(("P45=%02X ", data));
159149}
160150
151
161152/* Layer 2&3 Palettes (Low Bits) */
162153WRITE8_HANDLER( dynax_blit_palette23_w )
163154{
164   if (layer_layout == LAYOUT_HNORIDUR)
165      dynax_blit_palettes = (dynax_blit_palettes & 0xff00) | ((data&0x0f)<<4) | ((data&0xf0)>>4);
155   dynax_state *state = (dynax_state *)space->machine->driver_data;
156
157   if (state->layer_layout == LAYOUT_HNORIDUR)
158      state->blit_palettes = (state->blit_palettes & 0xff00) | ((data & 0x0f) << 4) | ((data & 0xf0) >> 4);
166159   else
167      dynax_blit_palettes = (dynax_blit_palettes & 0x00ff) | (data<<8);
168   LOG(("P23=%02X ",data));
160      state->blit_palettes = (state->blit_palettes & 0x00ff) | (data << 8);
161   LOG(("P23=%02X ", data));
169162}
163
170164WRITE8_HANDLER( tenkai_blit_palette23_w )
171165{
172   dynax_blit_palettes = (dynax_blit_palettes & 0x00ff) | ((data&0x0f)<<12) | ((data&0xf0)<<4);
173   LOG(("P23=%02X ",data));
166   dynax_state *state = (dynax_state *)space->machine->driver_data;
167   state->blit_palettes = (state->blit_palettes & 0x00ff) | ((data & 0x0f) << 12) | ((data & 0xf0) << 4);
168   LOG(("P23=%02X ", data));
174169}
170
171
175172/* Layer 6&7 Palettes (Low Bits) */
176173WRITE8_HANDLER( dynax_blit_palette67_w )
177174{
178   if (layer_layout == LAYOUT_HNORIDUR)
179      dynax_blit2_palettes = (dynax_blit2_palettes & 0xff00) | ((data&0x0f)<<4) | ((data&0xf0)>>4);
175   dynax_state *state = (dynax_state *)space->machine->driver_data;
176
177   if (state->layer_layout == LAYOUT_HNORIDUR)
178      state->blit2_palettes = (state->blit2_palettes & 0xff00) | ((data & 0x0f) << 4) | ((data & 0xf0) >> 4);
180179   else
181      dynax_blit2_palettes = (dynax_blit2_palettes & 0x00ff) | (data<<8);
182   LOG(("P67=%02X ",data));
180      state->blit2_palettes = (state->blit2_palettes & 0x00ff) | (data << 8);
181   LOG(("P67=%02X ", data));
183182}
184183
185184
186
187185/* Layers Palettes (High Bits) */
188186WRITE8_HANDLER( dynax_blit_palbank_w )
189187{
190   dynax_blit_palbank = data;
191   LOG(("PB=%02X ",data));
188   dynax_state *state = (dynax_state *)space->machine->driver_data;
189   state->blit_palbank = data;
190   LOG(("PB=%02X ", data));
192191}
192
193193WRITE8_HANDLER( dynax_blit2_palbank_w )
194194{
195   dynax_blit2_palbank = data;
196   LOG(("PB'=%02X ",data));
195   dynax_state *state = (dynax_state *)space->machine->driver_data;
196   state->blit2_palbank = data;
197   LOG(("PB'=%02X ", data));
197198}
198199
200
199201/* Which half of the layers to write two (interleaved games only) */
200202WRITE8_HANDLER( hanamai_layer_half_w )
201203{
202   hanamai_layer_half = (~data) & 1;
203   LOG(("H=%02X ",data));
204   dynax_state *state = (dynax_state *)space->machine->driver_data;
205   state->hanamai_layer_half = (~data) & 1;
206   LOG(("H=%02X ", data));
204207}
205208
209
206210/* Write to both halves of the layers (interleaved games only) */
207211WRITE8_HANDLER( hnoridur_layer_half2_w )
208212{
209   hnoridur_layer_half2 = (~data) & 1;
210   LOG(("H2=%02X ",data));
213   dynax_state *state = (dynax_state *)space->machine->driver_data;
214   state->hnoridur_layer_half2 = (~data) & 1;
215   LOG(("H2=%02X ", data));
211216}
212217
213218WRITE8_HANDLER( mjdialq2_blit_dest_w )
214219{
220   dynax_state *state = (dynax_state *)space->machine->driver_data;
215221   int mask = (2 >> offset);   /* 1 or 2 */
216222
217   dynax_blit_dest &= ~mask;
218   if (~data & 1) dynax_blit_dest |= mask;
223   state->blit_dest &= ~mask;
224
225   if (~data & 1)
226      state->blit_dest |= mask;
219227}
220228
229
221230/* Layers Enable */
222231WRITE8_HANDLER( dynax_layer_enable_w )
223232{
224   dynax_layer_enable = data;
225   LOG(("E=%02X ",data));
233   dynax_state *state = (dynax_state *)space->machine->driver_data;
234   state->layer_enable = data;
235   LOG(("E=%02X ", data));
226236}
227237
228238WRITE8_HANDLER( jantouki_layer_enable_w )
229239{
230   int mask = 1 << (7-offset);
231   dynax_layer_enable = (dynax_layer_enable & ~mask) | ((data & 1) ? mask : 0);
232   dynax_layer_enable |= 1;
240   dynax_state *state = (dynax_state *)space->machine->driver_data;
241   int mask = 1 << (7 - offset);
242   state->layer_enable = (state->layer_enable & ~mask) | ((data & 1) ? mask : 0);
243   state->layer_enable |= 1;
233244}
234245
235246WRITE8_HANDLER( mjdialq2_layer_enable_w )
236247{
248   dynax_state *state = (dynax_state *)space->machine->driver_data;
237249   int mask = (2 >> offset);   /* 1 or 2 */
238250
239   dynax_layer_enable &= ~mask;
240   if (~data & 1) dynax_layer_enable |= mask;
251   state->layer_enable &= ~mask;
252   if (~data & 1)
253      state->layer_enable |= mask;
241254}
242255
243256
244257WRITE8_HANDLER( dynax_flipscreen_w )
245258{
246   flipscreen = data & 1;
259   dynax_state *state = (dynax_state *)space->machine->driver_data;
260   state->flipscreen = data & 1;
247261   if (data & ~1)
248262      logerror("CPU#0 PC %06X: Warning, flip screen <- %02X\n", cpu_get_pc(space->cpu), data);
249   LOG(("F=%02X ",data));
263   LOG(("F=%02X ", data));
250264}
251265
252266
r7640r7641
254268
255269WRITE8_HANDLER( dynax_blit_romregion_w )
256270{
271   dynax_state *state = (dynax_state *)space->machine->driver_data;
257272   if (data < ARRAY_LENGTH(gfxregions))
258      dynax_blit_romregion = gfxregions[data];
259   LOG(("GFX%X ",data+1));
273      state->blit_romregion = data;
274   LOG(("GFX%X ", data + 1));
260275}
261276
262277WRITE8_HANDLER( dynax_blit2_romregion_w )
263278{
264   if (data+1 < ARRAY_LENGTH(gfxregions))
265      dynax_blit2_romregion = gfxregions[data+1];
266   LOG(("GFX%X' ",data+2));
279   dynax_state *state = (dynax_state *)space->machine->driver_data;
280   if (data + 1 < ARRAY_LENGTH(gfxregions))
281      state->blit2_romregion = data + 1;
282   LOG(("GFX%X' ", data + 2));
267283}
268284
269285/***************************************************************************
r7640r7641
294310
295311
296312/* Plot a pixel (in the pixmaps specified by dynax_blit_dest) */
297INLINE void blitter_plot_pixel(int layer,int mask, int x, int y, int pen, int wrap, int flags)
313INLINE void blitter_plot_pixel( running_machine *machine, int layer, int mask, int x, int y, int pen, int wrap, int flags )
298314{
315   dynax_state *state = (dynax_state *)machine->driver_data;
299316   int addr;
300317
301   if ( (y > 0xff) && (!(wrap & 2)) ) return;   // fixes mjdialq2 & mjangels title screens
302   if ( (x > 0xff) && (!(wrap & 1)) ) return;
318   if ((y > 0xff) && (!(wrap & 2))) return;   // fixes mjdialq2 & mjangels title screens
319   if ((x > 0xff) && (!(wrap & 1))) return;
303320
304321   x &= 0xff;   // confirmed by some mjdialq2 gfx and especially by mjfriday, which
305322            // uses the front layer to mask out the right side of the screen as
r7640r7641
309326            // mjdialq2 title screen so there's something we are missing. <fixed, see above>
310327
311328   /* "Flip Screen" just means complement the coordinates to 255 */
312   if (flipscreen)   {   x ^= 0xff;   y ^= 0xff;   }
329   if (state->flipscreen)   { x ^= 0xff; y ^= 0xff; }
313330
314331   /* Rotate: rotation = SWAPXY + FLIPY */
315   if (flags & 0x08)   { int t = x; x = y; y = t;   }
332   if (flags & 0x08)   { int t = x; x = y; y = t; }
316333
317   addr = x + (y<<8);
334   addr = x + (y << 8);
318335
319   switch (layer_layout)
336   switch (state->layer_layout)
320337   {
321338      case LAYOUT_HANAMAI:
322         if (mask & 0x01)   dynax_pixmap[layer+0][hanamai_layer_half^flipscreen][addr] = pen;
323         if (mask & 0x02)   dynax_pixmap[layer+1][hanamai_layer_half^flipscreen][addr] = pen;
324         if (mask & 0x04)   dynax_pixmap[layer+2][hanamai_layer_half^flipscreen][addr] = pen;
325         if (mask & 0x08)   dynax_pixmap[layer+3][hanamai_layer_half^flipscreen][addr] = pen;
339         if (BIT(mask, 0)) state->pixmap[layer + 0][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
340         if (BIT(mask, 1)) state->pixmap[layer + 1][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
341         if (BIT(mask, 2)) state->pixmap[layer + 2][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
342         if (BIT(mask, 3)) state->pixmap[layer + 3][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
326343         break;
327344
328345      case LAYOUT_HNORIDUR:
329         if (mask & 0x01)   dynax_pixmap[layer+0][hanamai_layer_half^flipscreen][addr] = pen;
330         if (mask & 0x02)   dynax_pixmap[layer+1][hanamai_layer_half^flipscreen][addr] = pen;
331         if (mask & 0x04)   dynax_pixmap[layer+2][hanamai_layer_half^flipscreen][addr] = pen;
332         if (mask & 0x08)   dynax_pixmap[layer+3][hanamai_layer_half^flipscreen][addr] = pen;
333         if (!hnoridur_layer_half2) break;
334         if (mask & 0x01)   dynax_pixmap[layer+0][1^hanamai_layer_half^flipscreen][addr] = pen;
335         if (mask & 0x02)   dynax_pixmap[layer+1][1^hanamai_layer_half^flipscreen][addr] = pen;
336         if (mask & 0x04)   dynax_pixmap[layer+2][1^hanamai_layer_half^flipscreen][addr] = pen;
337         if (mask & 0x08)   dynax_pixmap[layer+3][1^hanamai_layer_half^flipscreen][addr] = pen;
346         if (BIT(mask, 0)) state->pixmap[layer + 0][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
347         if (BIT(mask, 1)) state->pixmap[layer + 1][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
348         if (BIT(mask, 2)) state->pixmap[layer + 2][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
349         if (BIT(mask, 3)) state->pixmap[layer + 3][state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
350         if (!state->hnoridur_layer_half2)
351            break;
352         if (BIT(mask, 0)) state->pixmap[layer + 0][1 ^ state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
353         if (BIT(mask, 1)) state->pixmap[layer + 1][1 ^ state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
354         if (BIT(mask, 2)) state->pixmap[layer + 2][1 ^ state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
355         if (BIT(mask, 3)) state->pixmap[layer + 3][1 ^ state->hanamai_layer_half ^ state->flipscreen][addr] = pen;
338356         break;
339357
340358      case LAYOUT_JANTOUKI:
341         if (mask & 0x80)   dynax_pixmap[layer+3][1^flipscreen][addr] = pen;
342         if (mask & 0x40)   dynax_pixmap[layer+3][0^flipscreen][addr] = pen;
359         if (BIT(mask, 7)) state->pixmap[layer + 3][1 ^ state->flipscreen][addr] = pen;
360         if (BIT(mask, 6)) state->pixmap[layer + 3][0 ^ state->flipscreen][addr] = pen;
343361      case LAYOUT_DRGPUNCH:
344         if (mask & 0x20)   dynax_pixmap[layer+2][1^flipscreen][addr] = pen;
345         if (mask & 0x10)   dynax_pixmap[layer+2][0^flipscreen][addr] = pen;
346         if (mask & 0x08)   dynax_pixmap[layer+1][1^flipscreen][addr] = pen;
347         if (mask & 0x04)   dynax_pixmap[layer+1][0^flipscreen][addr] = pen;
348         if (mask & 0x02)   dynax_pixmap[layer+0][1^flipscreen][addr] = pen;
349         if (mask & 0x01)   dynax_pixmap[layer+0][0^flipscreen][addr] = pen;
362         if (BIT(mask, 5)) state->pixmap[layer + 2][1 ^ state->flipscreen][addr] = pen;
363         if (BIT(mask, 4)) state->pixmap[layer + 2][0 ^ state->flipscreen][addr] = pen;
364         if (BIT(mask, 3)) state->pixmap[layer + 1][1 ^ state->flipscreen][addr] = pen;
365         if (BIT(mask, 2)) state->pixmap[layer + 1][0 ^ state->flipscreen][addr] = pen;
366         if (BIT(mask, 1)) state->pixmap[layer + 0][1 ^ state->flipscreen][addr] = pen;
367         if (BIT(mask, 0)) state->pixmap[layer + 0][0 ^ state->flipscreen][addr] = pen;
350368         break;
351369
352370      case LAYOUT_MJDIALQ2:
353         if (mask & 0x01)   dynax_pixmap[layer+0][0][addr] = pen;
354         if (mask & 0x02)   dynax_pixmap[layer+1][0][addr] = pen;
371         if (BIT(mask, 0)) state->pixmap[layer + 0][0][addr] = pen;
372         if (BIT(mask, 1)) state->pixmap[layer + 1][0][addr] = pen;
355373         break;
356374   }
357375}
r7640r7641
359377
360378static int blitter_drawgfx( running_machine *machine, int layer, int mask, const char *gfx, int src, int pen, int x, int y, int wrap, int flags )
361379{
380   dynax_state *state = (dynax_state *)machine->driver_data;
362381   UINT8 cmd;
382   UINT8 *ROM = memory_region(machine, gfx);
383   size_t ROM_size = memory_region_length(machine, gfx);
363384
364   UINT8 *ROM      =   memory_region( machine, gfx );
365   size_t ROM_size   =   memory_region_length( machine, gfx );
366
367385   int sx;
368386
369   if (layer_layout == LAYOUT_HNORIDUR)   // e.g. yarunara
370      pen = ((pen >> 4) & 0xf) | ( (mask & 0x10) ? ((pen & 0x08) << 1) : 0 );
387   if (state->layer_layout == LAYOUT_HNORIDUR)   // e.g. yarunara
388      pen = ((pen >> 4) & 0xf) | ((mask & 0x10) ? ((pen & 0x08) << 1) : 0);
371389   else
372390      pen = (pen >> 4) & 0xf;
373391
374if (flags & 0xf4) popmessage("flags %02x",flags);
375   if ( flags & 1 )
392   if (flags & 0xf4)
393      popmessage("flags %02x", flags);
394
395   if (flags & 1)
376396   {
377      int start,len;
397      int start, len;
378398
379399      /* Clear the buffer(s) starting from the given scanline and exit */
380400
381      int addr = x + (y<<8);
401      int addr = x + (y << 8);
382402
383      if (flipscreen)
403      if (state->flipscreen)
384404         start = 0;
385405      else
386406         start = addr;
387407
388408      len = 0x10000 - addr;
389409
390      switch (layer_layout)
410      switch (state->layer_layout)
391411      {
392412         case LAYOUT_HANAMAI:
393            if (mask & 0x01)   memset(&dynax_pixmap[layer+0][0][start],pen,len);
394            if (mask & 0x01)   memset(&dynax_pixmap[layer+0][1][start],pen,len);
395            if (mask & 0x02)   memset(&dynax_pixmap[layer+1][0][start],pen,len);
396            if (mask & 0x02)   memset(&dynax_pixmap[layer+1][1][start],pen,len);
397            if (mask & 0x04)   memset(&dynax_pixmap[layer+2][0][start],pen,len);
398            if (mask & 0x04)   memset(&dynax_pixmap[layer+2][1][start],pen,len);
399            if (mask & 0x08)   memset(&dynax_pixmap[layer+3][0][start],pen,len);
400            if (mask & 0x08)   memset(&dynax_pixmap[layer+3][1][start],pen,len);
413            if (BIT(mask, 0)) memset(&state->pixmap[layer + 0][0][start], pen, len);
414            if (BIT(mask, 0)) memset(&state->pixmap[layer + 0][1][start], pen, len);
415            if (BIT(mask, 1)) memset(&state->pixmap[layer + 1][0][start], pen, len);
416            if (BIT(mask, 1)) memset(&state->pixmap[layer + 1][1][start], pen, len);
417            if (BIT(mask, 2)) memset(&state->pixmap[layer + 2][0][start], pen, len);
418            if (BIT(mask, 2)) memset(&state->pixmap[layer + 2][1][start], pen, len);
419            if (BIT(mask, 3)) memset(&state->pixmap[layer + 3][0][start], pen, len);
420            if (BIT(mask, 3)) memset(&state->pixmap[layer + 3][1][start], pen, len);
401421            break;
402422
403423         case LAYOUT_HNORIDUR:
404            if (mask & 0x01)   memset(&dynax_pixmap[layer+0][hanamai_layer_half][start],pen,len);
405            if (mask & 0x02)   memset(&dynax_pixmap[layer+1][hanamai_layer_half][start],pen,len);
406            if (mask & 0x04)   memset(&dynax_pixmap[layer+2][hanamai_layer_half][start],pen,len);
407            if (mask & 0x08)   memset(&dynax_pixmap[layer+3][hanamai_layer_half][start],pen,len);
408            if (!hnoridur_layer_half2) break;
409            if (mask & 0x01)   memset(&dynax_pixmap[layer+0][1-hanamai_layer_half][start],pen,len);
410            if (mask & 0x02)   memset(&dynax_pixmap[layer+1][1-hanamai_layer_half][start],pen,len);
411            if (mask & 0x04)   memset(&dynax_pixmap[layer+2][1-hanamai_layer_half][start],pen,len);
412            if (mask & 0x08)   memset(&dynax_pixmap[layer+3][1-hanamai_layer_half][start],pen,len);
424            if (BIT(mask, 0)) memset(&state->pixmap[layer + 0][state->hanamai_layer_half][start], pen, len);
425            if (BIT(mask, 1)) memset(&state->pixmap[layer + 1][state->hanamai_layer_half][start], pen, len);
426            if (BIT(mask, 2)) memset(&state->pixmap[layer + 2][state->hanamai_layer_half][start], pen, len);
427            if (BIT(mask, 3)) memset(&state->pixmap[layer + 3][state->hanamai_layer_half][start], pen, len);
428            if (!state->hnoridur_layer_half2)
429               break;
430            if (BIT(mask, 0)) memset(&state->pixmap[layer + 0][1 - state->hanamai_layer_half][start], pen, len);
431            if (BIT(mask, 1)) memset(&state->pixmap[layer + 1][1 - state->hanamai_layer_half][start], pen, len);
432            if (BIT(mask, 2)) memset(&state->pixmap[layer + 2][1 - state->hanamai_layer_half][start], pen, len);
433            if (BIT(mask, 3)) memset(&state->pixmap[layer + 3][1 - state->hanamai_layer_half][start], pen, len);
413434            break;
414435
415436         case LAYOUT_JANTOUKI:
416            if (mask & 0x80)   memset(&dynax_pixmap[layer+3][1][start],pen,len);
417            if (mask & 0x40)   memset(&dynax_pixmap[layer+3][0][start],pen,len);
437            if (BIT(mask, 7)) memset(&state->pixmap[layer + 3][1][start], pen, len);
438            if (BIT(mask, 6)) memset(&state->pixmap[layer + 3][0][start], pen, len);
418439         case LAYOUT_DRGPUNCH:
419            if (mask & 0x20)   memset(&dynax_pixmap[layer+2][1][start],pen,len);
420            if (mask & 0x10)   memset(&dynax_pixmap[layer+2][0][start],pen,len);
421            if (mask & 0x08)   memset(&dynax_pixmap[layer+1][1][start],pen,len);
422            if (mask & 0x04)   memset(&dynax_pixmap[layer+1][0][start],pen,len);
423            if (mask & 0x02)   memset(&dynax_pixmap[layer+0][1][start],pen,len);
424            if (mask & 0x01)   memset(&dynax_pixmap[layer+0][0][start],pen,len);
440            if (BIT(mask, 5)) memset(&state->pixmap[layer + 2][1][start], pen, len);
441            if (BIT(mask, 4)) memset(&state->pixmap[layer + 2][0][start], pen, len);
442            if (BIT(mask, 3)) memset(&state->pixmap[layer + 1][1][start], pen, len);
443            if (BIT(mask, 2)) memset(&state->pixmap[layer + 1][0][start], pen, len);
444            if (BIT(mask, 1)) memset(&state->pixmap[layer + 0][1][start], pen, len);
445            if (BIT(mask, 0)) memset(&state->pixmap[layer + 0][0][start], pen, len);
425446            break;
426447
427448         case LAYOUT_MJDIALQ2:
428            if (mask & 0x01)   memset(&dynax_pixmap[layer+0][0][start],pen,len);
429            if (mask & 0x02)   memset(&dynax_pixmap[layer+1][0][start],pen,len);
449            if (BIT(mask, 0)) memset(&state->pixmap[layer + 0][0][start], pen, len);
450            if (BIT(mask, 1)) memset(&state->pixmap[layer + 1][0][start], pen, len);
430451            break;
431452      }
432453
r7640r7641
441462   {
442463      if (src >= ROM_size)
443464      {
444popmessage("GFXROM OVER %08x",src);
465         popmessage("GFXROM OVER %08x",src);
445466         return src;
446467      }
468
447469      cmd = ROM[src++];
448470      src &= 0xfffff;
449471      if (!(flags & 0x02))   // Ignore the pens specified in ROM, draw everything with the pen supplied as parameter
450         pen = (pen & 0xf0) | ((cmd & 0xf0)>>4);
472         pen = (pen & 0xf0) | ((cmd & 0xf0) >> 4);
451473      cmd = (cmd & 0x0f);
452474
453475      switch (cmd)
r7640r7641
462484         break;
463485
464486      case 0xe:   // unused ? was "change dest mask" in the "rev1" blitter
465         popmessage("Blitter unknown command %06X: %02X\n", src-1, cmd);
487         popmessage("Blitter unknown command %06X: %02X\n", src - 1, cmd);
466488
467489      case 0xd:   // Skip X pixels
468490         if (src >= ROM_size)
469491         {
470popmessage("GFXROM OVER %08x",src);
492            popmessage("GFXROM OVER %08x",src);
471493            return src;
472494         }
473495         x = sx + ROM[src++];
r7640r7641
477499      case 0xc:   // Draw N pixels
478500         if (src >= ROM_size)
479501         {
480popmessage("GFXROM OVER %08x",src);
502            popmessage("GFXROM OVER %08x", src);
481503            return src;
482504         }
483505         cmd = ROM[src++];
r7640r7641
496518      case 0x2:
497519      case 0x1:   // Draw N pixels
498520         while (cmd--)
499            blitter_plot_pixel(layer, mask, x++, y, pen, wrap, flags);
521            blitter_plot_pixel(machine, layer, mask, x++, y, pen, wrap, flags);
500522         break;
501523
502524      case 0x0:   // Stop
r7640r7641
507529
508530
509531
510static void dynax_blitter_start(running_machine *machine, int flags)
532static void dynax_blitter_start( running_machine *machine, int flags )
511533{
534   dynax_state *state = (dynax_state *)machine->driver_data;
512535   int blit_newsrc;
513536
514   LOG(("XY=%X,%X SRC=%X BLIT=%X\n",blit_x,blit_y,blit_src,flags));
537   LOG(("XY=%X,%X SRC=%X BLIT=%X\n", state->blit_x, state->blit_y, state->blit_src, flags));
515538
516   blit_newsrc =
517      blitter_drawgfx(
539   blit_newsrc = blitter_drawgfx(
518540         machine,
519541         0,                  // layer
520         dynax_blit_dest,      // layer mask
521         dynax_blit_romregion,   // rom region
522         blit_src,            // rom address
523         dynax_blit_pen,         // pen
524         blit_x, blit_y,         // x,y
525         dynax_blit_wrap_enable,   // wrap around
542         state->blit_dest,      // layer mask
543         gfxregions[state->blit_romregion],   // rom region
544         state->blit_src,            // rom address
545         state->blit_pen,         // pen
546         state->blit_x, state->blit_y,         // x,y
547         state->blit_wrap_enable,   // wrap around
526548         flags               // flags
527549      );
528550
529   blit_src   =   (blit_src      &   ~0x0fffff) |
530               (blit_newsrc   &    0x0fffff) ;
551   state->blit_src = (state->blit_src & ~0x0fffff) | (blit_newsrc & 0x0fffff);
531552
532553   /* Generate an IRQ */
533   if (update_irq_func)
554   if (state->update_irq_func)
534555   {
535      dynax_blitter_irq = 1;
536      update_irq_func(machine);
556      state->blitter_irq = 1;
557      state->update_irq_func(machine);
537558   }
538559}
539560
540static void jantouki_blitter_start(running_machine *machine, int flags)
561static void jantouki_blitter_start( running_machine *machine, int flags )
541562{
563   dynax_state *state = (dynax_state *)machine->driver_data;
542564   int blit_newsrc;
543565
544   LOG(("XY=%X,%X SRC=%X BLIT=%X\n",blit_x,blit_y,blit_src,flags));
566   LOG(("XY=%X,%X SRC=%X BLIT=%X\n", state->blit_x, state->blit_y, state->blit_src, flags));
545567
546   blit_newsrc =
547      blitter_drawgfx(
568   blit_newsrc = blitter_drawgfx(
548569         machine,
549570         0,                  // layer
550         dynax_blit_dest,      // layer mask
551         dynax_blit_romregion,   // rom region
552         blit_src,            // rom address
553         dynax_blit_pen,         // pen
554         blit_x, blit_y,         // x,y
555         dynax_blit_wrap_enable,   // wrap around
571         state->blit_dest,      // layer mask
572         gfxregions[state->blit_romregion],   // rom region
573         state->blit_src,            // rom address
574         state->blit_pen,         // pen
575         state->blit_x, state->blit_y,         // x,y
576         state->blit_wrap_enable,   // wrap around
556577         flags               // flags
557578      );
558579
559   blit_src   =   (blit_src      &   ~0x0fffff) |
560               (blit_newsrc   &    0x0fffff) ;
580   state->blit_src = (state->blit_src & ~0x0fffff) | (blit_newsrc & 0x0fffff);
561581
562582   /* Generate an IRQ */
563   if (update_irq_func)
583   if (state->update_irq_func)
564584   {
565      dynax_blitter_irq = 1;
566      update_irq_func(machine);
585      state->blitter_irq = 1;
586      state->update_irq_func(machine);
567587   }
568588}
569589
570static void jantouki_blitter2_start(running_machine *machine, int flags)
590static void jantouki_blitter2_start( running_machine *machine, int flags )
571591{
592   dynax_state *state = (dynax_state *)machine->driver_data;
572593   int blit2_newsrc;
573594
574   LOG(("XY'=%X,%X SRC'=%X BLIT'=%02X\n",blit2_x,blit2_y,blit2_src,flags));
595   LOG(("XY'=%X,%X SRC'=%X BLIT'=%02X\n", state->blit2_x, state->blit2_y, state->blit2_src, flags));
575596
576   blit2_newsrc =
577      blitter_drawgfx(
597   blit2_newsrc = blitter_drawgfx(
578598         machine,
579599         4,                     // layer
580         dynax_blit2_dest,         // layer mask
581         dynax_blit2_romregion,      // rom region
582         blit2_src,               // rom address
583         dynax_blit2_pen,         // pen
584         blit2_x, blit2_y,         // x,y
585         dynax_blit2_wrap_enable,   // wrap around
600         state->blit2_dest,         // layer mask
601         gfxregions[state->blit2_romregion],      // rom region
602         state->blit2_src,               // rom address
603         state->blit2_pen,         // pen
604         state->blit2_x, state->blit2_y,         // x,y
605         state->blit2_wrap_enable,   // wrap around
586606         flags                  // flags
587607      );
588608
589   blit2_src   =   (blit2_src      &   ~0x0fffff) |
590               (blit2_newsrc   &    0x0fffff) ;
609   state->blit2_src = (state->blit2_src & ~0x0fffff) | (blit2_newsrc & 0x0fffff);
591610
592611   /* Generate an IRQ */
593   if (update_irq_func)
612   if (state->update_irq_func)
594613   {
595      dynax_blitter2_irq = 1;
596      update_irq_func(machine);
614      state->blitter2_irq = 1;
615      state->update_irq_func(machine);
597616   }
598617}
599618
r7640r7641
601620
602621static WRITE8_HANDLER( dynax_blit_scroll_w )
603622{
604   switch( blit_src & 0xc00000 )
623   dynax_state *state = (dynax_state *)space->machine->driver_data;
624
625   switch (state->blit_src & 0xc00000)
605626   {
606      case 0x000000:   dynax_blit_scroll_x = data;
607                  LOG(("SX=%02X ",data));
627      case 0x000000:   state->blit_scroll_x = data;
628                  LOG(("SX=%02X ", data));
608629                  break;
609      case 0x400000:   dynax_blit_scroll_y = data;
610                  LOG(("SY=%02X ",data));
630      case 0x400000:   state->blit_scroll_y = data;
631                  LOG(("SY=%02X ", data));
611632                  break;
612633      case 0x800000:
613      case 0xc00000:   dynax_blit_wrap_enable = data;
614                  LOG(("WE=%02X ",data));
634      case 0xc00000:   state->blit_wrap_enable = data;
635                  LOG(("WE=%02X ", data));
615636                  break;
616637   }
617638}
r7640r7641
619640// inverted scroll values
620641static WRITE8_HANDLER( tenkai_blit_scroll_w )
621642{
622   switch( blit_src & 0xc00000 )
643   dynax_state *state = (dynax_state *)space->machine->driver_data;
644
645   switch (state->blit_src & 0xc00000)
623646   {
624      case 0x000000:   dynax_blit_scroll_x = ((data ^ 0xff) + 1) & 0xff;
625                  LOG(("SX=%02X ",data));
647      case 0x000000:   state->blit_scroll_x = ((data ^ 0xff) + 1) & 0xff;
648                  LOG(("SX=%02X ", data));
626649                  break;
627      case 0x400000:   dynax_blit_scroll_y = data ^ 0xff;
628                  LOG(("SY=%02X ",data));
650      case 0x400000:   state->blit_scroll_y = data ^ 0xff;
651                  LOG(("SY=%02X ", data));
629652                  break;
630653      case 0x800000:
631      case 0xc00000:   dynax_blit_wrap_enable = data;
632                  LOG(("WE=%02X ",data));
654      case 0xc00000:   state->blit_wrap_enable = data;
655                  LOG(("WE=%02X ", data));
633656                  break;
634657   }
635658}
636659
637660static WRITE8_HANDLER( dynax_blit2_scroll_w )
638661{
639   switch( blit2_src & 0xc00000 )
662   dynax_state *state = (dynax_state *)space->machine->driver_data;
663
664   switch (state->blit2_src & 0xc00000)
640665   {
641      case 0x000000:   dynax_blit2_scroll_x = data;
642                  LOG(("SX'=%02X ",data));
666      case 0x000000:   state->blit2_scroll_x = data;
667                  LOG(("SX'=%02X ", data));
643668                  break;
644      case 0x400000:   dynax_blit2_scroll_y = data;
645                  LOG(("SY'=%02X ",data));
669      case 0x400000:   state->blit2_scroll_y = data;
670                  LOG(("SY'=%02X ", data));
646671                  break;
647672      case 0x800000:
648      case 0xc00000:   dynax_blit2_wrap_enable = data;
649                  LOG(("WE'=%02X ",data));
673      case 0xc00000:   state->blit2_wrap_enable = data;
674                  LOG(("WE'=%02X ", data));
650675                  break;
651676   }
652677}
653678
654
655
656679WRITE8_HANDLER( dynax_blitter_rev2_w )
657680{
681   dynax_state *state = (dynax_state *)space->machine->driver_data;
682
658683   switch (offset)
659684   {
660      case 0: dynax_blitter_start(space->machine,data); break;
661      case 1:   blit_x      =   data; break;
662      case 2: blit_y      =   data; break;
663      case 3:   blit_src   =   (blit_src & 0xffff00) | (data << 0); break;
664      case 4: blit_src   =   (blit_src & 0xff00ff) | (data << 8); break;
665      case 5: blit_src   =   (blit_src & 0x00ffff) | (data <<16); break;
666      case 6: dynax_blit_scroll_w(space,0,data); break;
685      case 0: dynax_blitter_start(space->machine, data); break;
686      case 1: state->blit_x = data; break;
687      case 2: state->blit_y = data; break;
688      case 3: state->blit_src = (state->blit_src & 0xffff00) | (data <<  0); break;
689      case 4: state->blit_src = (state->blit_src & 0xff00ff) | (data <<  8); break;
690      case 5: state->blit_src = (state->blit_src & 0x00ffff) | (data << 16); break;
691      case 6: dynax_blit_scroll_w(space, 0, data); break;
667692   }
668693}
669694
670695// different scroll_w
671696WRITE8_HANDLER( tenkai_blitter_rev2_w )
672697{
698   dynax_state *state = (dynax_state *)space->machine->driver_data;
699
673700   switch (offset)
674701   {
675      case 0: dynax_blitter_start(space->machine,data); break;
676      case 1:   blit_x      =   data; break;
677      case 2: blit_y      =   data; break;
678      case 3:   blit_src   =   (blit_src & 0xffff00) | (data << 0); break;
679      case 4: blit_src   =   (blit_src & 0xff00ff) | (data << 8); break;
680      case 5: blit_src   =   (blit_src & 0x00ffff) | (data <<16); break;
681      case 6: tenkai_blit_scroll_w(space,0,data); break;
702      case 0: dynax_blitter_start(space->machine, data); break;
703      case 1: state->blit_x = data; break;
704      case 2: state->blit_y = data; break;
705      case 3: state->blit_src = (state->blit_src & 0xffff00) | (data <<  0); break;
706      case 4: state->blit_src = (state->blit_src & 0xff00ff) | (data <<  8); break;
707      case 5: state->blit_src = (state->blit_src & 0x00ffff) | (data << 16); break;
708      case 6: tenkai_blit_scroll_w(space, 0, data); break;
682709   }
683710}
684711
685712
686713WRITE8_HANDLER( jantouki_blitter_rev2_w )
687714{
715   dynax_state *state = (dynax_state *)space->machine->driver_data;
716
688717   switch (offset)
689718   {
690      case 0: jantouki_blitter_start(space->machine,data); break;
691      case 1:   blit_x      =   data; break;
692      case 2: blit_y      =   data; break;
693      case 3:   blit_src   =   (blit_src & 0xffff00) | (data << 0); break;
694      case 4: blit_src   =   (blit_src & 0xff00ff) | (data << 8); break;
695      case 5: blit_src   =   (blit_src & 0x00ffff) | (data <<16); break;
696      case 6: dynax_blit_scroll_w(space,0,data); break;
719      case 0: jantouki_blitter_start(space->machine, data); break;
720      case 1: state->blit_x = data; break;
721      case 2: state->blit_y = data; break;
722      case 3: state->blit_src = (state->blit_src & 0xffff00) | (data <<  0); break;
723      case 4: state->blit_src = (state->blit_src & 0xff00ff) | (data <<  8); break;
724      case 5: state->blit_src = (state->blit_src & 0x00ffff) | (data << 16); break;
725      case 6: dynax_blit_scroll_w(space, 0, data); break;
697726   }
698727}
699728
700729WRITE8_HANDLER( jantouki_blitter2_rev2_w )
701730{
731   dynax_state *state = (dynax_state *)space->machine->driver_data;
732
702733   switch (offset)
703734   {
704735      case 0: jantouki_blitter2_start(space->machine,data); break;
705      case 1:   blit2_x      =   data; break;
706      case 2: blit2_y      =   data; break;
707      case 3:   blit2_src   =   (blit2_src & 0xffff00) | (data << 0); break;
708      case 4: blit2_src   =   (blit2_src & 0xff00ff) | (data << 8); break;
709      case 5: blit2_src   =   (blit2_src & 0x00ffff) | (data <<16); break;
710      case 6: dynax_blit2_scroll_w(space,0,data); break;
736      case 1: state->blit2_x = data; break;
737      case 2: state->blit2_y = data; break;
738      case 3: state->blit2_src = (state->blit2_src & 0xffff00) | (data <<  0); break;
739      case 4: state->blit2_src = (state->blit2_src & 0xff00ff) | (data <<  8); break;
740      case 5: state->blit2_src = (state->blit2_src & 0x00ffff) | (data << 16); break;
741      case 6: dynax_blit2_scroll_w(space, 0, data); break;
711742   }
712743}
713744
r7640r7641
720751
721752***************************************************************************/
722753
723static const int *priority_table;
724754//                                          0       1       2       3       4       5       6       7
725755static const int priority_hnoridur[8] = { 0x0231, 0x2103, 0x3102, 0x2031, 0x3021, 0x1302, 0x2310, 0x1023 };
726756static const int priority_mcnpshnt[8] = { 0x3210, 0x2103, 0x3102, 0x2031, 0x3021, 0x1302, 0x2310, 0x1023 };
727757static const int priority_mjelctrn[8] = { 0x0231, 0x0321, 0x2031, 0x2301, 0x3021, 0x3201 ,0x0000, 0x0000 };   // this game doesn't use (hasn't?) layer 1
728758
729static void Video_Reset(void)
759
760static void dynax_common_reset( running_machine *machine )
730761{
731   dynax_blit_romregion = "gfx1";         dynax_blit2_romregion = "gfx1";
732   dynax_blit_dest = -1;               dynax_blit2_dest = -1;
733   dynax_blit_pen = 0x7;               dynax_blit2_pen = 0x7;
734   dynax_blit_palbank = 0;               dynax_blit2_palbank = 0;
735   dynax_blit_palettes = 0;            dynax_blit2_palettes = 0;
736   dynax_layer_enable = -1;
737   dynax_blit_backpen = 0;
762   dynax_state *state = (dynax_state *)machine->driver_data;
738763
739   extra_scroll_x = 0;
740   extra_scroll_y = 0;
764   state->blit_romregion = 0;
765   state->blit2_romregion = 0;
766   state->blit_dest = -1;
767   state->blit2_dest = -1;
768   state->blit_pen = 0x7;
769   state->blit2_pen = 0x7;
770   state->blit_palbank = 0;
771   state->blit2_palbank = 0;
772   state->blit_palettes = 0;
773   state->blit2_palettes = 0;
774   state->layer_enable = -1;
775   state->blit_backpen = 0;
741776
742   hnoridur_layer_half2 = 0;
777   state->extra_scroll_x = 0;
778   state->extra_scroll_y = 0;
743779
744   update_irq_func = sprtmtch_update_irq;
780   state->hnoridur_layer_half2 = 0;
781
782   state->update_irq_func = sprtmtch_update_irq;
783
784   state->blit_scroll_x = 0;
785   state->blit2_scroll_x = 0;
786   state->blit_scroll_y = 0;
787   state->blit2_scroll_y = 0;
788   state->blit_wrap_enable = 0;
789   state->blit2_wrap_enable = 0;
790   state->blit_x = 0;
791   state->blit_y = 0;
792   state->blit2_x = 0;
793   state->blit2_y = 0;
794   state->blit_src = 0;
795   state->blit2_src = 0;
796   state->hanamai_layer_half = 0;
797   state->flipscreen = 0;
798   state->hanamai_priority = 0;
799
800   state_save_register_global(machine, state->blit_romregion);
801   state_save_register_global(machine, state->blit2_romregion);
802   state_save_register_global(machine, state->blit_dest);
803   state_save_register_global(machine, state->blit2_dest);
804   state_save_register_global(machine, state->blit_pen);
805   state_save_register_global(machine, state->blit2_pen);
806   state_save_register_global(machine, state->blit_palbank);
807   state_save_register_global(machine, state->blit2_palbank);
808   state_save_register_global(machine, state->blit_palettes);
809   state_save_register_global(machine, state->blit2_palettes);
810   state_save_register_global(machine, state->layer_enable);
811   state_save_register_global(machine, state->blit_backpen);
812   state_save_register_global(machine, state->extra_scroll_x);
813   state_save_register_global(machine, state->extra_scroll_y);
814   state_save_register_global(machine, state->hnoridur_layer_half2);
815
816   state_save_register_global(machine, state->blit_scroll_x);
817   state_save_register_global(machine, state->blit2_scroll_x);
818   state_save_register_global(machine, state->blit_scroll_y);
819   state_save_register_global(machine, state->blit2_scroll_y);
820   state_save_register_global(machine, state->blit_wrap_enable);
821   state_save_register_global(machine, state->blit2_wrap_enable);
822   state_save_register_global(machine, state->blit_x);
823   state_save_register_global(machine, state->blit_y);
824   state_save_register_global(machine, state->blit2_x);
825   state_save_register_global(machine, state->blit2_y);
826   state_save_register_global(machine, state->blit_src);
827   state_save_register_global(machine, state->blit2_src);
828   state_save_register_global(machine, state->hanamai_layer_half);
829   state_save_register_global(machine, state->flipscreen);
830   state_save_register_global(machine, state->hanamai_priority);
745831}
746832
747833VIDEO_START( hanamai )
748834{
749   dynax_pixmap[0][0] = auto_alloc_array(machine, UINT8, 256*256);
750   dynax_pixmap[0][1] = auto_alloc_array(machine, UINT8, 256*256);
751   dynax_pixmap[1][0] = auto_alloc_array(machine, UINT8, 256*256);
752   dynax_pixmap[1][1] = auto_alloc_array(machine, UINT8, 256*256);
753   dynax_pixmap[2][0] = auto_alloc_array(machine, UINT8, 256*256);
754   dynax_pixmap[2][1] = auto_alloc_array(machine, UINT8, 256*256);
755   dynax_pixmap[3][0] = auto_alloc_array(machine, UINT8, 256*256);
756   dynax_pixmap[3][1] = auto_alloc_array(machine, UINT8, 256*256);
835   dynax_state *state = (dynax_state *)machine->driver_data;
757836
758   Video_Reset();
759   layer_layout = LAYOUT_HANAMAI;
837   state->pixmap[0][0] = auto_alloc_array(machine, UINT8, 256 * 256);
838   state->pixmap[0][1] = auto_alloc_array(machine, UINT8, 256 * 256);
839   state->pixmap[1][0] = auto_alloc_array(machine, UINT8, 256 * 256);
840   state->pixmap[1][1] = auto_alloc_array(machine, UINT8, 256 * 256);
841   state->pixmap[2][0] = auto_alloc_array(machine, UINT8, 256 * 256);
842   state->pixmap[2][1] = auto_alloc_array(machine, UINT8, 256 * 256);
843   state->pixmap[3][0] = auto_alloc_array(machine, UINT8, 256 * 256);
844   state->pixmap[3][1] = auto_alloc_array(machine, UINT8, 256 * 256);
845
846   dynax_common_reset(machine);
847   state->layer_layout = LAYOUT_HANAMAI;
848
849   state_save_register_global_pointer(machine, state->pixmap[0][0], 256 * 256);
850   state_save_register_global_pointer(machine, state->pixmap[0][1], 256 * 256);
851   state_save_register_global_pointer(machine, state->pixmap[1][0], 256 * 256);
852   state_save_register_global_pointer(machine, state->pixmap[1][1], 256 * 256);
853   state_save_register_global_pointer(machine, state->pixmap[2][0], 256 * 256);
854   state_save_register_global_pointer(machine, state->pixmap[2][1], 256 * 256);
855   state_save_register_global_pointer(machine, state->pixmap[3][0], 256 * 256);
856   state_save_register_global_pointer(machine, state->pixmap[3][1], 256 * 256);
760857}
761858
762859VIDEO_START( hnoridur )
763860{
764   dynax_pixmap[0][0] = auto_alloc_array(machine, UINT8, 256*256);
765   dynax_pixmap[0][1] = auto_alloc_array(machine, UINT8, 256*256);
766   dynax_pixmap[1][0] = auto_alloc_array(machine, UINT8, 256*256);
767   dynax_pixmap[1][1] = auto_alloc_array(machine, UINT8, 256*256);
768   dynax_pixmap[2][0] = auto_alloc_array(machine, UINT8, 256*256);
769   dynax_pixmap[2][1] = auto_alloc_array(machine, UINT8, 256*256);
770   dynax_pixmap[3][0] = auto_alloc_array(machine, UINT8, 256*256);
771   dynax_pixmap[3][1] = auto_alloc_array(machine, UINT8, 256*256);
861   dynax_state *state = (dynax_state *)machine->driver_data;
772862
773   Video_Reset();
774   layer_layout = LAYOUT_HNORIDUR;
863   state->pixmap[0][0] = auto_alloc_array(machine, UINT8, 256 * 256);
864   state->pixmap[0][1] = auto_alloc_array(machine, UINT8, 256 * 256);
865   state->pixmap[1][0] = auto_alloc_array(machine, UINT8, 256 * 256);
866   state->pixmap[1][1] = auto_alloc_array(machine, UINT8, 256 * 256);
867   state->pixmap[2][0] = auto_alloc_array(machine, UINT8, 256 * 256);
868   state->pixmap[2][1] = auto_alloc_array(machine, UINT8, 256 * 256);
869   state->pixmap[3][0] = auto_alloc_array(machine, UINT8, 256 * 256);
870   state->pixmap[3][1] = auto_alloc_array(machine, UINT8, 256 * 256);
775871
776   priority_table = priority_hnoridur;
872   dynax_common_reset(machine);
873   state->layer_layout = LAYOUT_HNORIDUR;
874
875   state->priority_table = priority_hnoridur;
876
877   state_save_register_global_pointer(machine, state->pixmap[0][0], 256 * 256);
878   state_save_register_global_pointer(machine, state->pixmap[0][1], 256 * 256);
879   state_save_register_global_pointer(machine, state->pixmap[1][0], 256 * 256);
880   state_save_register_global_pointer(machine, state->pixmap[1][1], 256 * 256);
881   state_save_register_global_pointer(machine, state->pixmap[2][0], 256 * 256);
882   state_save_register_global_pointer(machine, state->pixmap[2][1], 256 * 256);
883   state_save_register_global_pointer(machine, state->pixmap[3][0], 256 * 256);
884   state_save_register_global_pointer(machine, state->pixmap[3][1], 256 * 256);
777885}
778886
779887VIDEO_START( mcnpshnt )
780888{
889   dynax_state *state = (dynax_state *)machine->driver_data;
890
781891   VIDEO_START_CALL(hnoridur);
782   priority_table = priority_mcnpshnt;
892   state->priority_table = priority_mcnpshnt;
783893}
784894
785895VIDEO_START( sprtmtch )
786896{
787   dynax_pixmap[0][0] = auto_alloc_array(machine, UINT8, 256*256);
788   dynax_pixmap[0][1] = auto_alloc_array(machine, UINT8, 256*256);
789   dynax_pixmap[1][0] = auto_alloc_array(machine, UINT8, 256*256);
790   dynax_pixmap[1][1] = auto_alloc_array(machine, UINT8, 256*256);
791   dynax_pixmap[2][0] = auto_alloc_array(machine, UINT8, 256*256);
792   dynax_pixmap[2][1] = auto_alloc_array(machine, UINT8, 256*256);
897   dynax_state *state = (dynax_state *)machine->driver_data;
793898
794   Video_Reset();
795   layer_layout = LAYOUT_DRGPUNCH;
899   state->pixmap[0][0] = auto_alloc_array(machine, UINT8, 256 * 256);
900   state->pixmap[0][1] = auto_alloc_array(machine, UINT8, 256 * 256);
901   state->pixmap[1][0] = auto_alloc_array(machine, UINT8, 256 * 256);
902   state->pixmap[1][1] = auto_alloc_array(machine, UINT8, 256 * 256);
903   state->pixmap[2][0] = auto_alloc_array(machine, UINT8, 256 * 256);
904   state->pixmap[2][1] = auto_alloc_array(machine, UINT8, 256 * 256);
905
906   dynax_common_reset(machine);
907   state->layer_layout = LAYOUT_DRGPUNCH;
908
909   state_save_register_global_pointer(machine, state->pixmap[0][0], 256 * 256);
910   state_save_register_global_pointer(machine, state->pixmap[0][1], 256 * 256);
911   state_save_register_global_pointer(machine, state->pixmap[1][0], 256 * 256);
912   state_save_register_global_pointer(machine, state->pixmap[1][1], 256 * 256);
913   state_save_register_global_pointer(machine, state->pixmap[2][0], 256 * 256);
914   state_save_register_global_pointer(machine, state->pixmap[2][1], 256 * 256);
796915}
797916
798917VIDEO_START( jantouki )
799918{
800   dynax_pixmap[0][0] = auto_alloc_array(machine, UINT8, 256*256);
801   dynax_pixmap[0][1] = auto_alloc_array(machine, UINT8, 256*256);
802   dynax_pixmap[1][0] = auto_alloc_array(machine, UINT8, 256*256);
803   dynax_pixmap[1][1] = auto_alloc_array(machine, UINT8, 256*256);
804   dynax_pixmap[2][0] = auto_alloc_array(machine, UINT8, 256*256);
805   dynax_pixmap[2][1] = auto_alloc_array(machine, UINT8, 256*256);
806   dynax_pixmap[3][0] = auto_alloc_array(machine, UINT8, 256*256);
807   dynax_pixmap[3][1] = auto_alloc_array(machine, UINT8, 256*256);
808   dynax_pixmap[4][0] = auto_alloc_array(machine, UINT8, 256*256);
809   dynax_pixmap[4][1] = auto_alloc_array(machine, UINT8, 256*256);
810   dynax_pixmap[5][0] = auto_alloc_array(machine, UINT8, 256*256);
811   dynax_pixmap[5][1] = auto_alloc_array(machine, UINT8, 256*256);
812   dynax_pixmap[6][0] = auto_alloc_array(machine, UINT8, 256*256);
813   dynax_pixmap[6][1] = auto_alloc_array(machine, UINT8, 256*256);
814   dynax_pixmap[7][0] = auto_alloc_array(machine, UINT8, 256*256);
815   dynax_pixmap[7][1] = auto_alloc_array(machine, UINT8, 256*256);
919   dynax_state *state = (dynax_state *)machine->driver_data;
816920
817   Video_Reset();
818   layer_layout = LAYOUT_JANTOUKI;
921   state->pixmap[0][0] = auto_alloc_array(machine, UINT8, 256 * 256);
922   state->pixmap[0][1] = auto_alloc_array(machine, UINT8, 256 * 256);
923   state->pixmap[1][0] = auto_alloc_array(machine, UINT8, 256 * 256);
924   state->pixmap[1][1] = auto_alloc_array(machine, UINT8, 256 * 256);
925   state->pixmap[2][0] = auto_alloc_array(machine, UINT8, 256 * 256);
926   state->pixmap[2][1] = auto_alloc_array(machine, UINT8, 256 * 256);
927   state->pixmap[3][0] = auto_alloc_array(machine, UINT8, 256 * 256);
928   state->pixmap[3][1] = auto_alloc_array(machine, UINT8, 256 * 256);
929   state->pixmap[4][0] = auto_alloc_array(machine, UINT8, 256 * 256);
930   state->pixmap[4][1] = auto_alloc_array(machine, UINT8, 256 * 256);
931   state->pixmap[5][0] = auto_alloc_array(machine, UINT8, 256 * 256);
932   state->pixmap[5][1] = auto_alloc_array(machine, UINT8, 256 * 256);
933   state->pixmap[6][0] = auto_alloc_array(machine, UINT8, 256 * 256);
934   state->pixmap[6][1] = auto_alloc_array(machine, UINT8, 256 * 256);
935   state->pixmap[7][0] = auto_alloc_array(machine, UINT8, 256 * 256);
936   state->pixmap[7][1] = auto_alloc_array(machine, UINT8, 256 * 256);
819937
820   update_irq_func = jantouki_update_irq;
938   dynax_common_reset(machine);
939   state->layer_layout = LAYOUT_JANTOUKI;
940   state->update_irq_func = jantouki_update_irq;
941
942   state_save_register_global_pointer(machine, state->pixmap[0][0], 256 * 256);
943   state_save_register_global_pointer(machine, state->pixmap[0][1], 256 * 256);
944   state_save_register_global_pointer(machine, state->pixmap[1][0], 256 * 256);
945   state_save_register_global_pointer(machine, state->pixmap[1][1], 256 * 256);
946   state_save_register_global_pointer(machine, state->pixmap[2][0], 256 * 256);
947   state_save_register_global_pointer(machine, state->pixmap[2][1], 256 * 256);
948   state_save_register_global_pointer(machine, state->pixmap[3][0], 256 * 256);
949   state_save_register_global_pointer(machine, state->pixmap[3][1], 256 * 256);
950   state_save_register_global_pointer(machine, state->pixmap[4][0], 256 * 256);
951   state_save_register_global_pointer(machine, state->pixmap[4][1], 256 * 256);
952   state_save_register_global_pointer(machine, state->pixmap[5][0], 256 * 256);
953   state_save_register_global_pointer(machine, state->pixmap[5][1], 256 * 256);
954   state_save_register_global_pointer(machine, state->pixmap[6][0], 256 * 256);
955   state_save_register_global_pointer(machine, state->pixmap[6][1], 256 * 256);
956   state_save_register_global_pointer(machine, state->pixmap[7][0], 256 * 256);
957   state_save_register_global_pointer(machine, state->pixmap[7][1], 256 * 256);
821958}
822959
823960VIDEO_START( mjdialq2 )
824961{
825   dynax_pixmap[0][0] = auto_alloc_array(machine, UINT8, 256*256);
826   dynax_pixmap[1][0] = auto_alloc_array(machine, UINT8, 256*256);
962   dynax_state *state = (dynax_state *)machine->driver_data;
827963
828   Video_Reset();
829   layer_layout = LAYOUT_MJDIALQ2;
964   state->pixmap[0][0] = auto_alloc_array(machine, UINT8, 256 * 256);
965   state->pixmap[1][0] = auto_alloc_array(machine, UINT8, 256 * 256);
830966
831   update_irq_func = 0;
967   dynax_common_reset(machine);
968   state->layer_layout = LAYOUT_MJDIALQ2;
969   state->update_irq_func = 0;
970
971   state_save_register_global_pointer(machine, state->pixmap[0][0], 256 * 256);
972   state_save_register_global_pointer(machine, state->pixmap[1][0], 256 * 256);
832973}
833974
834975VIDEO_START( mjelctrn )
835976{
977   dynax_state *state = (dynax_state *)machine->driver_data;
978
836979   VIDEO_START_CALL(hnoridur);
837980
838   priority_table = priority_mjelctrn;
839   update_irq_func = mjelctrn_update_irq;
981   state->priority_table = priority_mjelctrn;
982   state->update_irq_func = mjelctrn_update_irq;
840983}
841984
842985VIDEO_START( neruton )
843986{
987   dynax_state *state = (dynax_state *)machine->driver_data;
988
844989   VIDEO_START_CALL(hnoridur);
845990
846//  priority_table = priority_mjelctrn;
847   update_irq_func = neruton_update_irq;
991//  state->priority_table = priority_mjelctrn;
992   state->update_irq_func = neruton_update_irq;
848993}
849994
850995/***************************************************************************
r7640r7641
8551000
8561001***************************************************************************/
8571002
858static void hanamai_copylayer(bitmap_t *bitmap,const rectangle *cliprect,int i)
1003static void hanamai_copylayer( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int i )
8591004{
1005   dynax_state *state = (dynax_state *)machine->driver_data;
8601006   int color;
861   int scrollx,scrolly;
1007   int scrollx, scrolly;
8621008
863   switch ( i )
1009   switch (i)
8641010   {
865      case 0:   color = (dynax_blit_palettes >>  0) & 0xf;   break;
866      case 1:   color = (dynax_blit_palettes >>  4) & 0xf;   break;
867      case 2:   color = (dynax_blit_palettes >>  8) & 0xf;   break;
868      case 3:   color = (dynax_blit_palettes >> 12) & 0xf;   break;
1011      case 0:   color = (state->blit_palettes >>  0) & 0x0f;   break;
1012      case 1:   color = (state->blit_palettes >>  4) & 0x0f;   break;
1013      case 2:   color = (state->blit_palettes >>  8) & 0x0f;   break;
1014      case 3:   color = (state->blit_palettes >> 12) & 0x0f;   break;
8691015      default:   return;
8701016   }
8711017
872   color += (dynax_blit_palbank & 0x0f) * 16;
1018   color += (state->blit_palbank & 0x0f) * 16;
8731019
874   scrollx = dynax_blit_scroll_x;
875   scrolly = dynax_blit_scroll_y;
1020   scrollx = state->blit_scroll_x;
1021   scrolly = state->blit_scroll_y;
8761022
877   if (   (layer_layout == LAYOUT_HANAMAI      &&   i == 1)   ||
878         (layer_layout == LAYOUT_HNORIDUR   &&   i == 1)   )
1023   if (i == 1 && (state->layer_layout == LAYOUT_HANAMAI   || state->layer_layout == LAYOUT_HNORIDUR))
8791024   {
880      scrollx = extra_scroll_x;
881      scrolly = extra_scroll_y;
1025      scrollx = state->extra_scroll_x;
1026      scrolly = state->extra_scroll_y;
8821027   }
8831028
8841029   {
885      int dy,length,pen,offs;
886      UINT8 *src1 = dynax_pixmap[i][1];
887      UINT8 *src2 = dynax_pixmap[i][0];
1030      int dy, length, pen, offs;
1031      UINT8 *src1 = state->pixmap[i][1];
1032      UINT8 *src2 = state->pixmap[i][0];
8881033
889      int palbase = 16*color;
1034      int palbase = 16 * color;
8901035      offs = 0;
8911036
8921037      for (dy = 0; dy < 256; dy++)
r7640r7641
8951040         UINT16 *dstbase = BITMAP_ADDR16(bitmap, (dy - scrolly) & 0xff, 0);
8961041
8971042         length = scrollx;
898         dst = dstbase + 2*(256 - length);
1043         dst = dstbase + 2 * (256 - length);
8991044         while (length--)
9001045         {
9011046            pen = *(src1++);
902            if (pen) *dst     = palbase + pen;
1047            if (pen) *dst = palbase + pen;
9031048            pen = *(src2++);
904            if (pen) *(dst+1) = palbase + pen;
1049            if (pen) *(dst + 1) = palbase + pen;
9051050            dst += 2;
9061051         }
9071052
r7640r7641
9101055         while (length--)
9111056         {
9121057            pen = *(src1++);
913            if (pen) *dst     = palbase + pen;
1058            if (pen) *dst = palbase + pen;
9141059            pen = *(src2++);
915            if (pen) *(dst+1) = palbase + pen;
1060            if (pen) *(dst + 1) = palbase + pen;
9161061            dst += 2;
9171062         }
9181063      }
r7640r7641
9201065}
9211066
9221067
923static void jantouki_copylayer(bitmap_t *bitmap,const rectangle *cliprect,int i, int y)
1068static void jantouki_copylayer( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int i, int y )
9241069{
925   int color,scrollx,scrolly,palettes,palbank;
1070   dynax_state *state = (dynax_state *)machine->driver_data;
1071   int color, scrollx, scrolly, palettes, palbank;
9261072
9271073   if (i < 4)
9281074   {
929      scrollx      =   dynax_blit_scroll_x;
930      scrolly      =   dynax_blit_scroll_y;
931      palettes   =   dynax_blit_palettes;
932      palbank      =   dynax_blit_palbank;
1075      scrollx  = state->blit_scroll_x;
1076      scrolly  = state->blit_scroll_y;
1077      palettes = state->blit_palettes;
1078      palbank  = state->blit_palbank;
9331079   }
9341080   else
9351081   {
936      scrollx      =   dynax_blit2_scroll_x;
937      scrolly      =   dynax_blit2_scroll_y;
938      palettes   =   dynax_blit2_palettes;
939      palbank      =   dynax_blit2_palbank;
1082      scrollx  = state->blit2_scroll_x;
1083      scrolly  = state->blit2_scroll_y;
1084      palettes = state->blit2_palettes;
1085      palbank  = state->blit2_palbank;
9401086   }
9411087
942   switch ( i % 4 )
1088   switch (i % 4)
9431089   {
944      case 0:   color = ((palettes  >> 12) & 0xf) + ((palbank & 1) << 4);   break;
945      case 1:   color = ((palettes  >>  8) & 0xf) + ((palbank & 1) << 4);   break;
946      case 2:   color = ((palettes  >>  4) & 0xf) + ((palbank & 1) << 4);   break;
947      case 3:   color = ((palettes  >>  0) & 0xf) + ((palbank & 1) << 4);   break;
1090      case 0: color = ((palettes  >> 12) & 0x0f) + ((palbank & 1) << 4);   break;
1091      case 1: color = ((palettes  >>  8) & 0x0f) + ((palbank & 1) << 4);   break;
1092      case 2: color = ((palettes  >>  4) & 0x0f) + ((palbank & 1) << 4);   break;
1093      case 3: color = ((palettes  >>  0) & 0x0f) + ((palbank & 1) << 4);   break;
9481094      default: return;
9491095   }
9501096
9511097   {
952      int dy,length,pen,offs;
953      UINT8 *src1 = dynax_pixmap[i][1];
954      UINT8 *src2 = dynax_pixmap[i][0];
1098      int dy, length, pen, offs;
1099      UINT8 *src1 = state->pixmap[i][1];
1100      UINT8 *src2 = state->pixmap[i][0];
9551101
956      int palbase = 16*color;
1102      int palbase = 16 * color;
9571103      offs = 0;
9581104
9591105      for (dy = 0; dy < 256; dy++)
r7640r7641
9641110
9651111         if ((sy < cliprect->min_y) || (sy > cliprect->max_y))
9661112         {
967            src1+=256;
968            src2+=256;
1113            src1 += 256;
1114            src2 += 256;
9691115            continue;
9701116         }
9711117
9721118         length = scrollx;
973         dst = dstbase + 2*(256 - length);
1119         dst = dstbase + 2 * (256 - length);
9741120         while (length--)
9751121         {
9761122            pen = *(src1++);
977            if (pen) *dst     = palbase + pen;
1123            if (pen) *dst = palbase + pen;
9781124            pen = *(src2++);
979            if (pen) *(dst+1) = palbase + pen;
1125            if (pen) *(dst + 1) = palbase + pen;
9801126            dst += 2;
9811127         }
9821128
r7640r7641
9851131         while (length--)
9861132         {
9871133            pen = *(src1++);
988            if (pen) *dst     = palbase + pen;
1134            if (pen) *dst = palbase + pen;
9891135            pen = *(src2++);
990            if (pen) *(dst+1) = palbase + pen;
1136            if (pen) *(dst + 1) = palbase + pen;
9911137            dst += 2;
9921138         }
9931139      }
r7640r7641
9951141}
9961142
9971143
998static void mjdialq2_copylayer(bitmap_t *bitmap,const rectangle *cliprect,int i)
1144static void mjdialq2_copylayer( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int i )
9991145{
1146   dynax_state *state = (dynax_state *)machine->driver_data;
10001147   int color;
1001   int scrollx,scrolly;
1148   int scrollx, scrolly;
10021149
1003   switch ( i )
1150   switch (i)
10041151   {
1005      case 0:   color = (dynax_blit_palettes >>  4) & 0xf;   break;
1006      case 1:   color = (dynax_blit_palettes >>  0) & 0xf;   break;
1152      case 0: color = (state->blit_palettes >> 4) & 0x0f;   break;
1153      case 1: color = (state->blit_palettes >> 0) & 0x0f;   break;
10071154      default:   return;
10081155   }
10091156
1010   color += (dynax_blit_palbank & 1) * 16;
1157   color += (state->blit_palbank & 1) * 16;
10111158
1012   scrollx = dynax_blit_scroll_x;
1013   scrolly = dynax_blit_scroll_y;
1159   scrollx = state->blit_scroll_x;
1160   scrolly = state->blit_scroll_y;
10141161
10151162   {
1016      int dy,length,pen,offs;
1017      UINT8 *src = dynax_pixmap[i][0];
1163      int dy, length, pen, offs;
1164      UINT8 *src = state->pixmap[i][0];
10181165
1019      int palbase = 16*color;
1166      int palbase = 16 * color;
10201167      offs = 0;
10211168
10221169      for (dy = 0; dy < 256; dy++)
r7640r7641
10451192   }
10461193}
10471194
1048
1049
1050static int hanamai_priority;
1051
10521195WRITE8_HANDLER( hanamai_priority_w )
10531196{
1054   hanamai_priority = data;
1197   dynax_state *state = (dynax_state *)space->machine->driver_data;
1198   state->hanamai_priority = data;
10551199}
10561200
10571201WRITE8_HANDLER( tenkai_priority_w )
10581202{
1059   hanamai_priority = BITSWAP8(data, 3,2,1,0, 4,7,5,6);
1203   dynax_state *state = (dynax_state *)space->machine->driver_data;
1204   state->hanamai_priority = BITSWAP8(data, 3, 2, 1, 0, 4, 7, 5, 6);
10601205}
10611206
1062static int debug_mask(running_machine *machine)
1207static int debug_mask( running_machine *machine )
10631208{
10641209#ifdef MAME_DEBUG
10651210   int msk = 0;
r7640r7641
10851230    I,O        -  Change palette (-,+)
10861231    J,K & N,M  -  Change "tile"  (-,+, slow & fast)
10871232    R          -  move "tile" to the next 1/8th of the gfx  */
1088static int debug_viewer(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
1233static int debug_viewer( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
10891234{
1235
10901236#ifdef MAME_DEBUG
10911237   static int toggle;
1092   if (input_code_pressed_once(machine, KEYCODE_T))   toggle = 1-toggle;
1093   if (toggle)   {
1094      UINT8 *RAM   =   memory_region( machine, "gfx1" );
1095      size_t size      =   memory_region_length( machine, "gfx1" );
1238   if (input_code_pressed_once(machine, KEYCODE_T))   toggle = 1 - toggle;
1239   if (toggle)
1240   {
1241      dynax_state *state = (dynax_state *)machine->driver_data;
1242      UINT8 *RAM = memory_region( machine, "gfx1" );
1243      size_t size = memory_region_length( machine, "gfx1" );
10961244      static int i = 0, c = 0, r = 0;
10971245
1098      if (input_code_pressed_once(machine, KEYCODE_I))   c = (c-1) & 0x1f;
1099      if (input_code_pressed_once(machine, KEYCODE_O))   c = (c+1) & 0x1f;
1100      if (input_code_pressed_once(machine, KEYCODE_R))   { r = (r+1) & 0x7;   i = size/8 * r; }
1246      if (input_code_pressed_once(machine, KEYCODE_I))   c = (c - 1) & 0x1f;
1247      if (input_code_pressed_once(machine, KEYCODE_O))   c = (c + 1) & 0x1f;
1248      if (input_code_pressed_once(machine, KEYCODE_R))   { r = (r + 1) & 0x7;   i = size / 8 * r; }
11011249      if (input_code_pressed(machine, KEYCODE_M) | input_code_pressed_once(machine, KEYCODE_K))
11021250      {
1103         while( i < size && RAM[i] ) i++;      while( i < size && !RAM[i] ) i++;
1251         while (i < size && RAM[i]) i++;      while (i < size && !RAM[i]) i++;
11041252      }
11051253      if (input_code_pressed(machine, KEYCODE_N) | input_code_pressed_once(machine, KEYCODE_J))
11061254      {
1107         if (i >= 2) i-=2;   while( i > 0 && RAM[i] ) i--;   i++;
1255         if (i >= 2) i -= 2;   while (i > 0 && RAM[i]) i--;   i++;
11081256      }
11091257
1110      dynax_blit_palettes = (c & 0xf) * 0x111;
1111      dynax_blit_palbank  = (c >>  4) & 1;
1258      state->blit_palettes = (c & 0xf) * 0x111;
1259      state->blit_palbank  = (c >>  4) & 1;
11121260
1113      bitmap_fill(bitmap,cliprect,0);
1114      memset(dynax_pixmap[0][0],0,sizeof(UINT8)*0x100*0x100);
1115      if (layer_layout != LAYOUT_MJDIALQ2)
1116         memset(dynax_pixmap[0][1],0,sizeof(UINT8)*0x100*0x100);
1117      for (hanamai_layer_half = 0; hanamai_layer_half < 2; hanamai_layer_half++)
1118         blitter_drawgfx(machine,0,1,"gfx1",i,0,cliprect->min_x,cliprect->min_y,3,0);
1119      if (layer_layout != LAYOUT_MJDIALQ2)   hanamai_copylayer(bitmap, cliprect, 0);
1120      else                           mjdialq2_copylayer(bitmap,cliprect, 0);
1121      popmessage("%06X C%02X",i,c);
1261      bitmap_fill(bitmap, cliprect, 0);
1262      memset(state->pixmap[0][0], 0, sizeof(UINT8) * 0x100 * 0x100);
11221263
1264      if (state->layer_layout != LAYOUT_MJDIALQ2)
1265         memset(state->pixmap[0][1], 0, sizeof(UINT8) * 0x100 * 0x100);
1266      for (state->hanamai_layer_half = 0; state->hanamai_layer_half < 2; state->hanamai_layer_half++)
1267         blitter_drawgfx(machine, 0, 1, "gfx1", i, 0, cliprect->min_x, cliprect->min_y, 3, 0);
1268
1269      if (state->layer_layout != LAYOUT_MJDIALQ2)
1270         hanamai_copylayer(machine, bitmap, cliprect, 0);
1271      else
1272         mjdialq2_copylayer(machine, bitmap, cliprect, 0);
1273
1274      popmessage("%06X C%02X", i, c);
1275
11231276      return 1;
11241277   }
11251278#endif
r7640r7641
11301283
11311284VIDEO_UPDATE( hanamai )
11321285{
1133   int layers_ctrl = ~dynax_layer_enable;
1286   dynax_state *state = (dynax_state *)screen->machine->driver_data;
1287   int layers_ctrl = ~state->layer_enable;
11341288   int lay[4];
11351289
1136   if (debug_viewer(screen->machine,bitmap,cliprect))   return 0;
1290   if (debug_viewer(screen->machine, bitmap, cliprect))
1291      return 0;
1292
11371293   layers_ctrl &= debug_mask(screen->machine);
11381294
1139   bitmap_fill(bitmap, cliprect,
1140      (dynax_blit_backpen & 0xff) + (dynax_blit_palbank & 1) * 256);
1295   bitmap_fill(bitmap, cliprect, (state->blit_backpen & 0xff) + (state->blit_palbank & 1) * 256);
11411296
11421297   /* bit 4 = display enable? */
1143   if (!(hanamai_priority & 0x10)) return 0;
1298   if (!(state->hanamai_priority & 0x10))
1299      return 0;
11441300
1145   switch (hanamai_priority)
1301   switch (state->hanamai_priority)
11461302   {
1147      default:   popmessage("unknown priority %02x",hanamai_priority);
1303      default:   popmessage("unknown priority %02x", state->hanamai_priority);
11481304      case 0x10:   lay[0] = 0; lay[1] = 1; lay[2] = 2; lay[3] = 3; break;
11491305      case 0x11:   lay[0] = 0; lay[1] = 3; lay[2] = 2; lay[3] = 1; break;
11501306      case 0x12:   lay[0] = 0; lay[1] = 1; lay[2] = 3; lay[3] = 2; break;
r7640r7641
11531309      case 0x15:   lay[0] = 0; lay[1] = 2; lay[2] = 3; lay[3] = 1; break;
11541310   }
11551311
1156   if (layers_ctrl & (1 << lay[0]))   hanamai_copylayer( bitmap, cliprect, lay[0] );
1157   if (layers_ctrl & (1 << lay[1]))   hanamai_copylayer( bitmap, cliprect, lay[1] );
1158   if (layers_ctrl & (1 << lay[2]))   hanamai_copylayer( bitmap, cliprect, lay[2] );
1159   if (layers_ctrl & (1 << lay[3]))   hanamai_copylayer( bitmap, cliprect, lay[3] );
1312   if (BIT(layers_ctrl, lay[0]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[0]);
1313   if (BIT(layers_ctrl, lay[1]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[1]);
1314   if (BIT(layers_ctrl, lay[2]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[2]);
1315   if (BIT(layers_ctrl, lay[3]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[3]);
11601316   return 0;
11611317}
11621318
11631319
11641320VIDEO_UPDATE( hnoridur )
11651321{
1166   int layers_ctrl = ~BITSWAP8(hanamai_priority, 7,6,5,4, 0,1,2,3);
1322   dynax_state *state = (dynax_state *)screen->machine->driver_data;
1323   int layers_ctrl = ~BITSWAP8(state->hanamai_priority, 7, 6, 5, 4, 0, 1, 2, 3);
11671324   int lay[4];
11681325   int pri;
11691326
1170   if (debug_viewer(screen->machine,bitmap,cliprect))   return 0;
1327   if (debug_viewer(screen->machine, bitmap, cliprect))
1328      return 0;
1329
11711330   layers_ctrl &= debug_mask(screen->machine);
11721331
1173   bitmap_fill(bitmap, cliprect,
1174      (dynax_blit_backpen & 0xff) + (dynax_blit_palbank & 0x0f) * 256);
1332   bitmap_fill(bitmap, cliprect, (state->blit_backpen & 0xff) + (state->blit_palbank & 0x0f) * 256);
11751333
1176   pri = hanamai_priority >> 4;
1334   pri = state->hanamai_priority >> 4;
11771335
11781336   if (pri > 7)
11791337   {
1180      popmessage("unknown priority %02x",hanamai_priority);
1338      popmessage("unknown priority %02x", state->hanamai_priority);
11811339      pri = 0;
11821340   }
11831341
1184   pri = priority_table[pri];
1342   pri = state->priority_table[pri];
11851343   lay[0] = (pri >> 12) & 3;
11861344   lay[1] = (pri >>  8) & 3;
11871345   lay[2] = (pri >>  4) & 3;
11881346   lay[3] = (pri >>  0) & 3;
11891347
1190   if (layers_ctrl & (1 << lay[0]))   hanamai_copylayer( bitmap, cliprect, lay[0] );
1191   if (layers_ctrl & (1 << lay[1]))   hanamai_copylayer( bitmap, cliprect, lay[1] );
1192   if (layers_ctrl & (1 << lay[2]))   hanamai_copylayer( bitmap, cliprect, lay[2] );
1193   if (layers_ctrl & (1 << lay[3]))   hanamai_copylayer( bitmap, cliprect, lay[3] );
1348   if (BIT(layers_ctrl, lay[0]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[0]);
1349   if (BIT(layers_ctrl, lay[1]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[1]);
1350   if (BIT(layers_ctrl, lay[2]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[2]);
1351   if (BIT(layers_ctrl, lay[3]))   hanamai_copylayer(screen->machine, bitmap, cliprect, lay[3]);
11941352
11951353   return 0;
11961354}
r7640r7641
11981356
11991357VIDEO_UPDATE( sprtmtch )
12001358{
1201   int layers_ctrl = ~dynax_layer_enable;
1359   dynax_state *state = (dynax_state *)screen->machine->driver_data;
1360   int layers_ctrl = ~state->layer_enable;
12021361
1203   if (debug_viewer(screen->machine,bitmap,cliprect))   return 0;
1362   if (debug_viewer(screen->machine,bitmap,cliprect))
1363      return 0;
1364
12041365   layers_ctrl &= debug_mask(screen->machine);
12051366
1206   bitmap_fill(bitmap, cliprect,
1207      (dynax_blit_backpen & 0xff) + (dynax_blit_palbank & 1) * 256);
1367   bitmap_fill(bitmap, cliprect, (state->blit_backpen & 0xff) + (state->blit_palbank & 1) * 256);
12081368
1209   if (layers_ctrl & 1)   hanamai_copylayer( bitmap, cliprect, 0 );
1210   if (layers_ctrl & 2)   hanamai_copylayer( bitmap, cliprect, 1 );
1211   if (layers_ctrl & 4)   hanamai_copylayer( bitmap, cliprect, 2 );
1369   if (BIT(layers_ctrl, 0))   hanamai_copylayer(screen->machine, bitmap, cliprect, 0);
1370   if (BIT(layers_ctrl, 1))   hanamai_copylayer(screen->machine, bitmap, cliprect, 1);
1371   if (BIT(layers_ctrl, 2))   hanamai_copylayer(screen->machine, bitmap, cliprect, 2);
12121372   return 0;
12131373}
12141374
12151375VIDEO_UPDATE( jantouki )
12161376{
1217   int layers_ctrl = dynax_layer_enable;
1377   dynax_state *state = (dynax_state *)screen->machine->driver_data;
1378   int layers_ctrl = state->layer_enable;
12181379
1219   running_device *top_screen    = devtag_get_device(screen->machine, "top");
1220   running_device *bottom_screen = devtag_get_device(screen->machine, "bottom");
1380   if (debug_viewer(screen->machine, bitmap, cliprect))
1381      return 0;
12211382
1222   if (debug_viewer(screen->machine,bitmap,cliprect))   return 0;
12231383   layers_ctrl &= debug_mask(screen->machine);
12241384
1225   bitmap_fill(bitmap, cliprect,
1226      (dynax_blit_backpen & 0xff) + (dynax_blit_palbank & 1) * 256);
1385   bitmap_fill(bitmap, cliprect, (state->blit_backpen & 0xff) + (state->blit_palbank & 1) * 256);
12271386
1228   if (screen == top_screen)
1387   if (screen == state->top_scr)
12291388   {
1230   //  if (layers_ctrl & 0x01) jantouki_copylayer( bitmap, cliprect, 3, 0 );
1231      if (layers_ctrl & 0x02)   jantouki_copylayer( bitmap, cliprect, 2, 0 );
1232      if (layers_ctrl & 0x04)   jantouki_copylayer( bitmap, cliprect, 1, 0 );
1233      if (layers_ctrl & 0x08)   jantouki_copylayer( bitmap, cliprect, 0, 0 );
1389   //  if (BIT(layers_ctrl, 0))   jantouki_copylayer(screen->machine, bitmap, cliprect, 3, 0);
1390      if (BIT(layers_ctrl, 1))   jantouki_copylayer(screen->machine, bitmap, cliprect, 2, 0);
1391      if (BIT(layers_ctrl, 2))   jantouki_copylayer(screen->machine, bitmap, cliprect, 1, 0);
1392      if (BIT(layers_ctrl, 3))   jantouki_copylayer(screen->machine, bitmap, cliprect, 0, 0);
12341393   }
1235   else if (screen == bottom_screen)
1394   else if (screen == state->bot_scr)
12361395   {
1237      if (layers_ctrl & 0x01)   jantouki_copylayer( bitmap, cliprect, 3, 0 );
1238      if (layers_ctrl & 0x10)   jantouki_copylayer( bitmap, cliprect, 7, 0 );
1239      if (layers_ctrl & 0x20)   jantouki_copylayer( bitmap, cliprect, 6, 0 );
1240      if (layers_ctrl & 0x40)   jantouki_copylayer( bitmap, cliprect, 5, 0 );
1241      if (layers_ctrl & 0x80)   jantouki_copylayer( bitmap, cliprect, 4, 0 );
1396      if (BIT(layers_ctrl, 0))   jantouki_copylayer(screen->machine, bitmap, cliprect, 3, 0);
1397      if (BIT(layers_ctrl, 4))   jantouki_copylayer(screen->machine, bitmap, cliprect, 7, 0);
1398      if (BIT(layers_ctrl, 5))   jantouki_copylayer(screen->machine, bitmap, cliprect, 6, 0);
1399      if (BIT(layers_ctrl, 6))   jantouki_copylayer(screen->machine, bitmap, cliprect, 5, 0);
1400      if (BIT(layers_ctrl, 7))   jantouki_copylayer(screen->machine, bitmap, cliprect, 4, 0);
12421401   }
12431402   return 0;
12441403}
r7640r7641
12461405
12471406VIDEO_UPDATE( mjdialq2 )
12481407{
1249   int layers_ctrl = ~dynax_layer_enable;
1408   dynax_state *state = (dynax_state *)screen->machine->driver_data;
1409   int layers_ctrl = ~state->layer_enable;
12501410
1251   if (debug_viewer(screen->machine,bitmap,cliprect))   return 0;
1411   if (debug_viewer(screen->machine, bitmap, cliprect))
1412      return 0;
1413
12521414   layers_ctrl &= debug_mask(screen->machine);
12531415
1254   bitmap_fill(bitmap, cliprect,
1255      (dynax_blit_backpen & 0xff) + (dynax_blit_palbank & 1) * 256);
1416   bitmap_fill(bitmap, cliprect, (state->blit_backpen & 0xff) + (state->blit_palbank & 1) * 256);
12561417
1257   if (layers_ctrl & 1)   mjdialq2_copylayer( bitmap, cliprect, 0 );
1258   if (layers_ctrl & 2)   mjdialq2_copylayer( bitmap, cliprect, 1 );
1418   if (BIT(layers_ctrl, 0))   mjdialq2_copylayer(screen->machine, bitmap, cliprect, 0);
1419   if (BIT(layers_ctrl, 1))   mjdialq2_copylayer(screen->machine, bitmap, cliprect, 1);
12591420   return 0;
12601421}
12611422
r7640r7641
12691430
12701431VIDEO_UPDATE(htengoku)
12711432{
1272   int layer,x,y;
1433   dynax_state *state = (dynax_state *)screen->machine->driver_data;
1434   int layer, x, y;
12731435
12741436   // render the layers, one by one, "dynax.c" style. Then convert the pixmaps to "ddenlovr.c"
12751437   // format and let VIDEO_UPDATE(ddenlovr) do the final compositing (priorities + palettes)
12761438   for (layer = 0; layer < 4; layer++)
12771439   {
1278      bitmap_fill(bitmap,cliprect,0);
1279      hanamai_copylayer( bitmap, cliprect, layer );
1440      bitmap_fill(bitmap, cliprect, 0);
1441      hanamai_copylayer(screen->machine, bitmap, cliprect, layer);
12801442
1281      for (y=0; y < 256; y++)
1282         for (x=0; x < 512; x++)
1283            ddenlovr_pixmap[3-layer][y*512+x] = (UINT8)(*BITMAP_ADDR16(bitmap, y,x));
1443      for (y = 0; y < 256; y++)
1444         for (x = 0; x < 512; x++)
1445            state->ddenlovr_pixmap[3 - layer][y * 512 + x] = (UINT8)(*BITMAP_ADDR16(bitmap, y, x));
12841446   }
1447
12851448   return VIDEO_UPDATE_CALL(ddenlovr);
12861449}
src/mame/video/paradise.c
r7640r7641
11/***************************************************************************
22
3                              -= Paradise / Target Ball / Torus =-
3               -= Paradise / Target Ball / Torus =-
44
5                    driver by   Luca Elia (l.elia@tin.it)
5               driver by   Luca Elia (l.elia@tin.it)
66
77
88Note:   if MAME_DEBUG is defined, pressing Z with:
r7640r7641
2828#include "emu.h"
2929#include "includes/paradise.h"
3030
31/* Variables that driver has access to: */
32
33UINT8 *paradise_vram_0,*paradise_vram_1,*paradise_vram_2;
34int paradise_sprite_inc;
35
36/* Variables only used here */
37
38static UINT8 paradise_palbank, paradise_priority;
39
4031WRITE8_HANDLER( paradise_flipscreen_w )
4132{
4233   flip_screen_set(space->machine, data ? 0 : 1);
r7640r7641
5142/* 800 bytes for red, followed by 800 bytes for green & 800 bytes for blue */
5243WRITE8_HANDLER( paradise_palette_w )
5344{
54   space->machine->generic.paletteram.u8[offset] = data;
45   paradise_state *state = (paradise_state *)space->machine->driver_data;
46   state->paletteram[offset] = data;
5547   offset %= 0x800;
56   palette_set_color_rgb(space->machine,offset,   space->machine->generic.paletteram.u8[offset + 0x800 * 0],
57                                 space->machine->generic.paletteram.u8[offset + 0x800 * 1],
58                                 space->machine->generic.paletteram.u8[offset + 0x800 * 2]   );
48   palette_set_color_rgb(space->machine, offset, state->paletteram[offset + 0x800 * 0], state->paletteram[offset + 0x800 * 1],
49      state->paletteram[offset + 0x800 * 2]);
5950}
6051
6152/***************************************************************************
r7640r7641
6960
7061***************************************************************************/
7162
72static tilemap_t *tilemap_0,*tilemap_1,*tilemap_2;
73
7463/* Background */
7564WRITE8_HANDLER( paradise_vram_0_w )
7665{
77   paradise_vram_0[offset] = data;
78   tilemap_mark_tile_dirty(tilemap_0, offset % 0x400);
66   paradise_state *state = (paradise_state *)space->machine->driver_data;
67   state->vram_0[offset] = data;
68   tilemap_mark_tile_dirty(state->tilemap_0, offset % 0x400);
7969}
8070
8171/* 16 color tiles with paradise_palbank as color code */
8272WRITE8_HANDLER( paradise_palbank_w )
8373{
74   paradise_state *state = (paradise_state *)space->machine->driver_data;
8475   int i;
8576   int bank1 = (data & 0x0e) | 1;
8677   int bank2 = (data & 0xf0);
8778
8879   for (i = 0; i < 15; i++)
89      palette_set_color_rgb(space->machine,0x800+i,   space->machine->generic.paletteram.u8[0x200 + bank2 + i + 0x800 * 0],
90                                    space->machine->generic.paletteram.u8[0x200 + bank2 + i + 0x800 * 1],
91                                    space->machine->generic.paletteram.u8[0x200 + bank2 + i + 0x800 * 2]   );
92   if (paradise_palbank != bank1)
80      palette_set_color_rgb(space->machine, 0x800 + i, state->paletteram[0x200 + bank2 + i + 0x800 * 0], state->paletteram[0x200 + bank2 + i + 0x800 * 1],
81                        state->paletteram[0x200 + bank2 + i + 0x800 * 2]);
82
83   if (state->palbank != bank1)
9384   {
94      paradise_palbank = bank1;
95      tilemap_mark_all_tiles_dirty(tilemap_0);
85      state->palbank = bank1;
86      tilemap_mark_all_tiles_dirty(state->tilemap_0);
9687   }
9788}
9889
9990static TILE_GET_INFO( get_tile_info_0 )
10091{
101   int code = paradise_vram_0[tile_index] + (paradise_vram_0[tile_index + 0x400] << 8);
102   SET_TILE_INFO(1, code, paradise_palbank, 0);
92   paradise_state *state = (paradise_state *)machine->driver_data;
93   int code = state->vram_0[tile_index] + (state->vram_0[tile_index + 0x400] << 8);
94   SET_TILE_INFO(1, code, state->palbank, 0);
10395}
10496
10597
10698/* Midground */
10799WRITE8_HANDLER( paradise_vram_1_w )
108100{
109   paradise_vram_1[offset] = data;
110   tilemap_mark_tile_dirty(tilemap_1, offset % 0x400);
101   paradise_state *state = (paradise_state *)space->machine->driver_data;
102   state->vram_1[offset] = data;
103   tilemap_mark_tile_dirty(state->tilemap_1, offset % 0x400);
111104}
112105
113106static TILE_GET_INFO( get_tile_info_1 )
114107{
115   int code = paradise_vram_1[tile_index] + (paradise_vram_1[tile_index + 0x400] << 8);
108   paradise_state *state = (paradise_state *)machine->driver_data;
109   int code = state->vram_1[tile_index] + (state->vram_1[tile_index + 0x400] << 8);
116110   SET_TILE_INFO(2, code, 0, 0);
117111}
118112
r7640r7641
120114/* Foreground */
121115WRITE8_HANDLER( paradise_vram_2_w )
122116{
123   paradise_vram_2[offset] = data;
124   tilemap_mark_tile_dirty(tilemap_2, offset % 0x400);
117   paradise_state *state = (paradise_state *)space->machine->driver_data;
118   state->vram_2[offset] = data;
119   tilemap_mark_tile_dirty(state->tilemap_2, offset % 0x400);
125120}
126121
127122static TILE_GET_INFO( get_tile_info_2 )
128123{
129   int code = paradise_vram_2[tile_index] + (paradise_vram_2[tile_index + 0x400] << 8);
124   paradise_state *state = (paradise_state *)machine->driver_data;
125   int code = state->vram_2[tile_index] + (state->vram_2[tile_index + 0x400] << 8);
130126   SET_TILE_INFO(3, code, 0, 0);
131127}
132128
r7640r7641
134130
135131WRITE8_HANDLER( paradise_pixmap_w )
136132{
137   int x,y;
133   paradise_state *state = (paradise_state *)space->machine->driver_data;
134   int x, y;
138135
139   space->machine->generic.videoram.u8[offset] = data;
136   state->videoram[offset] = data;
140137
141138   x = (offset & 0x7f) << 1;
142139   y = (offset >> 7);
143140
144   *BITMAP_ADDR16(space->machine->generic.tmpbitmap, y, x+0) = 0x80f - (data >> 4);
145   *BITMAP_ADDR16(space->machine->generic.tmpbitmap, y, x+1) = 0x80f - (data & 0x0f);
141   *BITMAP_ADDR16(state->tmpbitmap, y, x + 0) = 0x80f - (data >> 4);
142   *BITMAP_ADDR16(state->tmpbitmap, y, x + 1) = 0x80f - (data & 0x0f);
146143}
147144
148145
r7640r7641
154151
155152VIDEO_START( paradise )
156153{
157   tilemap_0 = tilemap_create(   machine, get_tile_info_0, tilemap_scan_rows, 8,8, 0x20,0x20 );
158   tilemap_1 = tilemap_create(   machine, get_tile_info_1, tilemap_scan_rows, 8,8, 0x20,0x20 );
159   tilemap_2 = tilemap_create(   machine, get_tile_info_2, tilemap_scan_rows, 8,8, 0x20,0x20 );
154   paradise_state *state = (paradise_state *)machine->driver_data;
160155
156   state->tilemap_0 = tilemap_create(machine, get_tile_info_0, tilemap_scan_rows, 8, 8, 0x20, 0x20);
157   state->tilemap_1 = tilemap_create(machine, get_tile_info_1, tilemap_scan_rows, 8, 8, 0x20, 0x20);
158   state->tilemap_2 = tilemap_create(machine, get_tile_info_2, tilemap_scan_rows, 8, 8, 0x20, 0x20);
159
161160   /* pixmap */
162   machine->generic.tmpbitmap = video_screen_auto_bitmap_alloc(machine->primary_screen);
161   state->tmpbitmap = video_screen_auto_bitmap_alloc(machine->primary_screen);
163162
164   tilemap_set_transparent_pen(tilemap_0,0x0f);
165   tilemap_set_transparent_pen(tilemap_1,0xff);
166   tilemap_set_transparent_pen(tilemap_2,0xff);
163   tilemap_set_transparent_pen(state->tilemap_0, 0x0f);
164   tilemap_set_transparent_pen(state->tilemap_1, 0xff);
165   tilemap_set_transparent_pen(state->tilemap_2, 0xff);
166
167   state_save_register_global_bitmap(machine, state->tmpbitmap);
167168}
168169
169170
r7640r7641
176177/* Sprites / Layers priority */
177178WRITE8_HANDLER( paradise_priority_w )
178179{
179   paradise_priority = data;
180   paradise_state *state = (paradise_state *)space->machine->driver_data;
181   state->priority = data;
180182}
181183
182static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
184static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
183185{
184   UINT8 *spriteram = machine->generic.spriteram.u8;
186   paradise_state *state = (paradise_state *)machine->driver_data;
187   UINT8 *spriteram = state->spriteram;
185188   int i;
186   for (i = 0; i < machine->generic.spriteram_size ; i += paradise_sprite_inc)
189   for (i = 0; i < state->spriteram_size ; i += state->sprite_inc)
187190   {
188      int code   =   spriteram[i+0];
189      int x      =   spriteram[i+1];
190      int y      =   spriteram[i+2] - 2;
191      int attr   =   spriteram[i+3];
191      int code = spriteram[i + 0];
192      int x    = spriteram[i + 1];
193      int y    = spriteram[i + 2] - 2;
194      int attr = spriteram[i + 3];
192195
193      int flipx   =   0;   // ?
194      int flipy   =   0;
196      int flipx = 0;   // ?
197      int flipy = 0;
195198
196199      if (flip_screen_get(machine))
197200      {
r7640r7641
229232
230233VIDEO_UPDATE( paradise )
231234{
235   paradise_state *state = (paradise_state *)screen->machine->driver_data;
232236   int layers_ctrl = -1;
233237
234238#ifdef MAME_DEBUG
r7640r7641
244248}
245249#endif
246250
247   bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
251   bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
248252
249   if (!(paradise_priority & 4))   /* Screen blanking */
253   if (!(state->priority & 4))   /* Screen blanking */
250254      return 0;
251255
252   if (paradise_priority & 1)
253      if (layers_ctrl&16)   draw_sprites(screen->machine,bitmap,cliprect);
256   if (state->priority & 1)
257      if (layers_ctrl & 16)
258         draw_sprites(screen->machine, bitmap, cliprect);
254259
255   if (layers_ctrl&1)   tilemap_draw(bitmap,cliprect, tilemap_0, 0,0);
256   if (layers_ctrl&2)   tilemap_draw(bitmap,cliprect, tilemap_1, 0,0);
257   if (layers_ctrl&4)   copybitmap_trans(bitmap,screen->machine->generic.tmpbitmap,flip_screen_get(screen->machine),flip_screen_get(screen->machine),0,0,cliprect, 0x80f);
260   if (layers_ctrl & 1)   tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0);
261   if (layers_ctrl & 2)   tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0);
262   if (layers_ctrl & 4)   copybitmap_trans(bitmap, state->tmpbitmap, flip_screen_get(screen->machine), flip_screen_get(screen->machine), 0, 0, cliprect, 0x80f);
258263
259   if (paradise_priority & 2)
264   if (state->priority & 2)
260265   {
261      if (!(paradise_priority & 1))
262         if (layers_ctrl&16)   draw_sprites(screen->machine, bitmap,cliprect);
263      if (layers_ctrl&8)   tilemap_draw(bitmap,cliprect, tilemap_2, 0,0);
266      if (!(state->priority & 1))
267         if (layers_ctrl & 16)
268            draw_sprites(screen->machine, bitmap, cliprect);
269      if (layers_ctrl & 8)
270         tilemap_draw(bitmap,cliprect, state->tilemap_2, 0, 0);
264271   }
265272   else
266273   {
267      if (layers_ctrl&8)   tilemap_draw(bitmap,cliprect, tilemap_2, 0,0);
268      if (!(paradise_priority & 1))
269         if (layers_ctrl&16)   draw_sprites(screen->machine, bitmap,cliprect);
274      if (layers_ctrl & 8)
275         tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
276      if (!(state->priority & 1))
277         if (layers_ctrl & 16)
278            draw_sprites(screen->machine, bitmap, cliprect);
270279   }
271280   return 0;
272281}
r7640r7641
274283/* no pix layer, no tilemap_0, different priority bits */
275284VIDEO_UPDATE( torus )
276285{
277   bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
286   paradise_state *state = (paradise_state *)screen->machine->driver_data;
278287
279   if (!(paradise_priority & 2))   /* Screen blanking */
288   bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
289
290   if (!(state->priority & 2))   /* Screen blanking */
280291      return 0;
281292
282   if (paradise_priority & 1)
283      draw_sprites(screen->machine, bitmap,cliprect);
293   if (state->priority & 1)
294      draw_sprites(screen->machine, bitmap, cliprect);
284295
285   tilemap_draw(bitmap,cliprect, tilemap_1, 0,0);
296   tilemap_draw(bitmap, cliprect, state->tilemap_1, 0,0);
286297
287   if(paradise_priority & 4)
298   if (state->priority & 4)
288299   {
289      if (!(paradise_priority & 1))
290         draw_sprites(screen->machine, bitmap,cliprect);
300      if (!(state->priority & 1))
301         draw_sprites(screen->machine, bitmap, cliprect);
291302
292      tilemap_draw(bitmap,cliprect, tilemap_2, 0,0);
303      tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
293304   }
294305   else
295306   {
296      tilemap_draw(bitmap,cliprect, tilemap_2, 0,0);
307      tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
297308
298      if (!(paradise_priority & 1))
309      if (!(state->priority & 1))
299310         draw_sprites(screen->machine, bitmap,cliprect);
300311   }
301312   return 0;
r7640r7641
304315/* I don't know how the priority bits work on this one */
305316VIDEO_UPDATE( madball )
306317{
307   bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
308   tilemap_draw(bitmap,cliprect, tilemap_0, 0,0);
309   tilemap_draw(bitmap,cliprect, tilemap_1, 0,0);
310   tilemap_draw(bitmap,cliprect, tilemap_2, 0,0);
311   draw_sprites(screen->machine, bitmap,cliprect);
318   paradise_state *state = (paradise_state *)screen->machine->driver_data;
319
320   bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
321   tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0);
322   tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0);
323   tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
324   draw_sprites(screen->machine, bitmap, cliprect);
312325   return 0;
313326}
314
315
src/mame/video/amiga.c
r7640r7641
623623   int ecolmask = 0, ocolmask = 0;
624624   int edelay = 0, odelay = 0;
625625   int next_copper_x;
626   int p;
626   int pl;
627627
628628   last_scanline = scanline;
629629
r7640r7641
723723            ebitoffs = 15 + edelay;
724724         }
725725
726         for (p = 0; p < 6; p++)
727            CUSTOM_REG(REG_BPL1DAT + p) = 0;
726         for (pl = 0; pl < 6; pl++)
727            CUSTOM_REG(REG_BPL1DAT + pl) = 0;
728728      }
729729
730730      /* need to run the sprite engine every pixel to ensure display */
r7640r7641
742742         {
743743            /* if we need to fetch more data, do it now */
744744            if (obitoffs == 15)
745               for (p = 0; p < planes; p += 2)
745               for (pl = 0; pl < planes; pl += 2)
746746               {
747                  CUSTOM_REG(REG_BPL1DAT + p) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + p * 2));
748                  CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += 2;
747                  CUSTOM_REG(REG_BPL1DAT + pl) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2));
748                  CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += 2;
749749               }
750750
751751            /* now assemble the bits */
r7640r7641
760760               {
761761                  obitoffs = 15;
762762
763                  for (p = 0; p < planes; p += 2)
763                  for (pl = 0; pl < planes; pl += 2)
764764                  {
765                     CUSTOM_REG(REG_BPL1DAT + p) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + p * 2));
766                     CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += 2;
765                     CUSTOM_REG(REG_BPL1DAT + pl) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2));
766                     CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += 2;
767767                  }
768768               }
769769
r7640r7641
783783         {
784784            /* if we need to fetch more data, do it now */
785785            if (ebitoffs == 15)
786               for (p = 1; p < planes; p += 2)
786               for (pl = 1; pl < planes; pl += 2)
787787               {
788                  CUSTOM_REG(REG_BPL1DAT + p) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + p * 2));
789                  CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += 2;
788                  CUSTOM_REG(REG_BPL1DAT + pl) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2));
789                  CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += 2;
790790               }
791791
792792            /* now assemble the bits */
r7640r7641
801801               {
802802                  ebitoffs = 15;
803803
804                  for (p = 1; p < planes; p += 2)
804                  for (pl = 1; pl < planes; pl += 2)
805805                  {
806                     CUSTOM_REG(REG_BPL1DAT + p) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + p * 2));
807                     CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += 2;
806                     CUSTOM_REG(REG_BPL1DAT + pl) = amiga_chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2));
807                     CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += 2;
808808                  }
809809               }
810810
r7640r7641
945945   /* end of the line: time to add the modulos */
946946   if (scanline >= vstart && scanline < vstop)
947947   {
948      int p;
949
950948      /* update odd planes */
951      for (p = 0; p < planes; p += 2)
952         CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += CUSTOM_REG_SIGNED(REG_BPL1MOD);
949      for (pl = 0; pl < planes; pl += 2)
950         CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += CUSTOM_REG_SIGNED(REG_BPL1MOD);
953951
954952      /* update even planes */
955      for (p = 1; p < planes; p += 2)
956         CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += CUSTOM_REG_SIGNED(REG_BPL2MOD);
953      for (pl = 1; pl < planes; pl += 2)
954         CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += CUSTOM_REG_SIGNED(REG_BPL2MOD);
957955   }
958956
959957   /* restore color00 */
src/mame/video/amigaaga.c
r7640r7641
781781   int ecolmask = 0, ocolmask = 0;
782782   int edelay = 0, odelay = 0;
783783   int next_copper_x;
784   int p;
784   int pl;
785785   pen_t ham_pix;
786786   int defbitoffs = 0;
787787
r7640r7641
921921            ebitoffs = defbitoffs + edelay;
922922         }
923923
924         for (p = 0; p < 8; p++)
925            aga_bpldat[p] = 0;
924         for (pl = 0; pl < 8; pl++)
925            aga_bpldat[pl] = 0;
926926      }
927927
928928      /* need to run the sprite engine every pixel to ensure display */
r7640r7641
941941            /* if we need to fetch more data, do it now */
942942            if (obitoffs == defbitoffs)
943943            {
944               for (p = 0; p < planes; p += 2)
944               for (pl = 0; pl < planes; pl += 2)
945945               {
946                  fetch_bitplane_data(p);
946                  fetch_bitplane_data(pl);
947947               }
948948            }
949949
r7640r7641
959959               {
960960                  obitoffs = defbitoffs;
961961
962                  for (p = 0; p < planes; p += 2)
962                  for (pl = 0; pl < planes; pl += 2)
963963                  {
964                     fetch_bitplane_data(p);
964                     fetch_bitplane_data(pl);
965965                  }
966966               }
967967
r7640r7641
982982            /* if we need to fetch more data, do it now */
983983            if (ebitoffs == defbitoffs)
984984            {
985               for (p = 1; p < planes; p += 2)
985               for (pl = 1; pl < planes; pl += 2)
986986               {
987                  fetch_bitplane_data(p);
987                  fetch_bitplane_data(pl);
988988               }
989989            }
990990
r7640r7641
10001000               {
10011001                  ebitoffs = defbitoffs;
10021002
1003                  for (p = 1; p < planes; p += 2)
1003                  for (pl = 1; pl < planes; pl += 2)
10041004                  {
1005                     fetch_bitplane_data(p);
1005                     fetch_bitplane_data(pl);
10061006                  }
10071007               }
10081008
r7640r7641
11441144   /* end of the line: time to add the modulos */
11451145   if (scanline >= vstart && scanline < vstop)
11461146   {
1147      int p;
1148
11491147      /* update odd planes */
1150      for (p = 0; p < planes; p += 2)
1151         CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += CUSTOM_REG_SIGNED(REG_BPL1MOD);
1148      for (pl = 0; pl < planes; pl += 2)
1149         CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += CUSTOM_REG_SIGNED(REG_BPL1MOD);
11521150
11531151      /* update even planes */
1154      for (p = 1; p < planes; p += 2)
1155         CUSTOM_REG_LONG(REG_BPL1PTH + p * 2) += CUSTOM_REG_SIGNED(REG_BPL2MOD);
1152      for (pl = 1; pl < planes; pl += 2)
1153         CUSTOM_REG_LONG(REG_BPL1PTH + pl * 2) += CUSTOM_REG_SIGNED(REG_BPL2MOD);
11561154   }
11571155
11581156   /* restore color00 */
src/mame/video/taitoic.c
r7640r7641
39983998   int screen_width = max_x - min_x + 1;
39993999
40004000   int y = min_y;
4001
4001#if 0
40024002   int twin_road = 0;
4003#endif
40034004
40044005   int road_A_address = y_offs * 4 + ((road_ctrl & 0x0300) << 2);   /* Index into roadram for road A */
40054006   int road_B_address = y_offs * 4 + ((road_ctrl & 0x0c00) << 0);   /* Index into roadram for road B */
r7640r7641
40934094
40944095      if (priorities[4] == 0)   priorities[4]++;   /* Fixes Aquajack LH edge dropping below background */
40954096
4097#if 0
40964098      if ((roada_bodyctrl & 0x8000) || (roadb_bodyctrl & 0x8000))
4097         twin_road ++;
4099         twin_road++;
4100#endif
40984101
40994102      /********************************************************/
41004103      /*                        ROAD A                        */
src/mame/video/toaplan1.c
r7640r7641
8484
8585
8686Abnormalities:
87 The equations for flipscreen, don't suite the horizontal games. So a minor
88 hack is implemented for them, though it still isn't 100% right - see below.
89
9087 How/when do priority 0 Tile layers really get displayed ?
9188
9289 What are the video PROMs for ? Priority maybe ?
9390
91 Zerowing flashes red when an enemy is shot, and this is done by flipping
92 layer 2 into its oversized second half which is all red. In flipscreen
93 mode, this doesn't work properly as the flip scroll value doesn't equate
94 properly.
95 Possibly a bug with the game itself using a wrong scroll value ??
96 Here's some notes:
97 First values are non red flash scrolls. Second values are red flash scrolls.
9498
95 ***** Notes on the horizontal game scroll Y probs (Eg, Zero Wing) *****
96
9799 Scrolls    PF1-X  PF1-Y    PF2-X  PF2-Y    PF3-X  PF3-Y    PF4-X  PF4-Y
98100 ------>    #4180  #f880    #1240  #f880    #4380  #f880    #e380  #f880
99101 -flip->    #1500  #7f00    #e8c0  #7f00    #1300  #7f00    #bb00  #7f00
r7640r7641
102104 -flip->    #1500  #7f00    #e8c0  #8580??  #1300  #7f00    #bb00  #7f00
103105                                      |
104106                                      |
105                                    f880 = 1111 1000 1000 = 1f1 scroll
106                                    7f00 - 0111 1111 0000 = 0fe scroll
107                                    7880 = 0111 1000 1000 = 0f1 scroll
108                                    8580 = 1000 0101 1000 = 10b scroll
107                                    f880 = 111110001xxxxxxx -> 1f1 scroll
108                                    7f00 = 011111110xxxxxxx -> 0fe scroll
109                                    7880 = 011110001xxxxxxx -> 0f1 scroll
110                                    8580 = 100001011xxxxxxx -> 10b scroll
109111
110 So a snapshot of the scroll equations become (from the functions below):
111    1f1 - (102 - 10f) == 1fe   star background
112    0Fe - (00d - 10f) == 200   star background (flipscreen)
113    0f1 - (102 - 10f) == 0fe   red  background
114    10B - (00d - 10f) == 20d   red  background (flipscreen) wrong!
115    10B - (00d - 002) == 100   red  background (flipscreen) should equate to this (100)
112 So a snapshot of the scroll equations become: (from the functions below)
113    1f1 - (102 - 101) == 1f0   star background
114    0fe - (00d - 1ef) == 0e0   star background (flipscreen)
115    0f1 - (102 - 101) == 0f0   red  background
116    10b - (00d - 1ef) == 0ed   red  background (flipscreen) wrong!
117    10b - (00d - 0ef) == 1ed   red  background (flipscreen) should somehow equate to this
116118
117119
118120***************************************************************************/
r7640r7641
329331   toaplan1_paletteram_alloc(machine);
330332   toaplan1_vram_alloc(machine);
331333
332   scrollx_offs1 = 0x0d + 6;
333   scrollx_offs2 = 0x0d + 4;
334   scrollx_offs3 = 0x0d + 2;
335   scrollx_offs4 = 0x0d + 0;
334   scrollx_offs1 = 0x00d + 6;
335   scrollx_offs2 = 0x00d + 4;
336   scrollx_offs3 = 0x00d + 2;
337   scrollx_offs4 = 0x00d + 0;
336338   scrolly_offs  = 0x111;
337339
338340   bcu_flipscreen = -1;
r7640r7641
453455      tilemap_set_flip_all(space->machine, (data ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0));
454456      if (bcu_flipscreen)
455457      {
456         scrollx_offs1 = 0x080 - 6;
457         scrollx_offs2 = 0x080 - 4;
458         scrollx_offs3 = 0x080 - 2;
459         scrollx_offs4 = 0x080 - 0;
460         scrolly_offs  = 0x1f8;
458         scrollx_offs1 = 0x1c0 - 6;
459         scrollx_offs2 = 0x1c0 - 4;
460         scrollx_offs3 = 0x1c0 - 2;
461         scrollx_offs4 = 0x1c0 - 0;
462         scrolly_offs  = 0x0e8;
461463      }
462464      else
463465      {
464         scrollx_offs1 = 0x0d + 6;
465         scrollx_offs2 = 0x0d + 4;
466         scrollx_offs3 = 0x0d + 2;
467         scrollx_offs4 = 0x0d + 0;
466         scrollx_offs1 = 0x00d + 6;
467         scrollx_offs2 = 0x00d + 4;
468         scrollx_offs3 = 0x00d + 2;
469         scrollx_offs4 = 0x00d + 0;
468470         scrolly_offs  = 0x111;
469471      }
470472      toaplan1_set_scrolls();
r7640r7641
480482      tilemap_set_flip_all(space->machine, (data ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0));
481483      if (bcu_flipscreen)
482484      {
483         scrollx_offs1 = 0x011 - 6;
484         scrollx_offs2 = 0x011 - 4;
485         scrollx_offs3 = 0x011 - 2;
486         scrollx_offs4 = 0x011 - 0;
487         scrolly_offs = 0x10f;
485         const rectangle *visarea = video_screen_get_visible_area(space->machine->primary_screen);
486
487         scrollx_offs1 = 0x151 - 6;
488         scrollx_offs2 = 0x151 - 4;
489         scrollx_offs3 = 0x151 - 2;
490         scrollx_offs4 = 0x151 - 0;
491         scrolly_offs  = 0x1ef;
492         scrolly_offs += ((visarea->max_y + 1) - ((visarea->max_y + 1) - visarea->min_y)) * 2;   /* Horizontal games are offset so adjust by +0x20 */
488493      }
489494      else
490495      {
r7640r7641
10741079         /****** flip the sprite layer ******/
10751080         if (fcu_flipscreen)
10761081         {
1077            sx_base += 8;
1078            sy_base -= 24;
1079            sx_base = 320 - sx_base;
1080            sy_base = 240 - sy_base;
1082            const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
1083
1084            sx_base = ((visarea->max_x + 1) - visarea->min_x) - (sx_base + 8);   /* visarea.x = 320 */
1085            sy_base = ((visarea->max_y + 1) - visarea->min_y) - (sy_base + 8);   /* visarea.y = 240 */
1086            sy_base += ((visarea->max_y + 1) - ((visarea->max_y + 1) - visarea->min_y)) * 2;   /* Horizontal games are offset so adjust by +0x20 */
10811087         }
10821088
10831089         for (dim_y = 0; dim_y < sprite_sizey; dim_y += 8)
src/mame/video/taitojc.c
r7640r7641
323323   float dz = extent->param[0].dpdx;
324324   float dcolor = extent->param[1].dpdx;
325325   UINT16 *fb = BITMAP_ADDR16(destmap, scanline, 0);
326   UINT16 *zb = BITMAP_ADDR16(extra->zbuffer, scanline, 0);
326   UINT16 *zb;
327327   int x;
328328
329   // avoid crash in landgear/dangcurv
330   if (!extra->zbuffer)
331   {
332      return;
333   }
334
335   zb = BITMAP_ADDR16(extra->zbuffer, scanline, 0);
336
329337   for (x = extent->startx; x < extent->stopx; x++)
330338   {
331339      int ic = (int)color & 0xffff;
src/mame/video/snes.c
r7640r7641
132132   SNES_COLOR_DEPTH_8BPP
133133};
134134
135/**********************************************************************************
136 * TODO: the draw_tile routines below should be merged/reworked to reduce everything
137 * to a single routine with the additional parameters: OAM/BG (to decide if checking
138 * against priority or not) and tile length (16 for hires BG, 8 otherwise)
139 **********************************************************************************/
135/*****************************************
136 * snes_draw_blend()
137 *
138 * Routine for additive/subtractive blending
139 * between the main and sub screens.
140 *****************************************/
140141
142INLINE void snes_draw_blend( UINT16 offset, UINT16 *colour, UINT8 prevent_color_math, UINT8 black_pen_clip, int switch_screens )
143{
144#ifdef SNES_LAYER_DEBUG
145   if (debug_options.colormath_disabled)
146      return;
147#endif /* SNES_LAYER_DEBUG */
148
149   /* when color math is applied to subscreen pixels, the blending depends on the blending used by the previous mainscreen
150    pixel, except for subscreen pixel 0 which has no previous mainscreen pixel, see comments in snes_refresh_scanline */
151   if (switch_screens && offset > 0)
152      offset -= 1;
153
154   if ((black_pen_clip == SNES_CLIP_ALWAYS) ||
155      (black_pen_clip == SNES_CLIP_IN && snes_ppu.clipmasks[SNES_COLOR][offset]) ||
156      (black_pen_clip == SNES_CLIP_OUT && !snes_ppu.clipmasks[SNES_COLOR][offset]))
157      *colour = 0; //clip to black before color math
158
159   if (prevent_color_math == SNES_CLIP_ALWAYS) // blending mode 3 == always OFF
160      return;
161
162   if ((prevent_color_math == SNES_CLIP_NEVER) ||
163      (prevent_color_math == SNES_CLIP_IN  && !snes_ppu.clipmasks[SNES_COLOR][offset]) ||
164      (prevent_color_math == SNES_CLIP_OUT && snes_ppu.clipmasks[SNES_COLOR][offset]))
165   {
166      UINT16 r, g, b;
167      struct SCANLINE *subscreen;
168      int clip_max = 0;   // if add then clip to 0x1f, if sub then clip to 0
169
170#ifdef SNES_LAYER_DEBUG
171      /* Toggle drawing of SNES_SUBSCREEN or SNES_MAINSCREEN */
172      if (debug_options.draw_subscreen)
173      {
174         subscreen = switch_screens ? &scanlines[SNES_SUBSCREEN] : &scanlines[SNES_MAINSCREEN];
175      }
176      else
177#endif /* SNES_LAYER_DEBUG */
178      {
179         subscreen = switch_screens ? &scanlines[SNES_MAINSCREEN] : &scanlines[SNES_SUBSCREEN];
180      }
181
182      if (snes_ppu.sub_add_mode) /* SNES_SUBSCREEN*/
183      {
184         if (!BIT(snes_ppu.color_modes, 7))
185         {
186            /* 0x00 add */
187            r = (*colour & 0x1f) + (subscreen->buffer[offset] & 0x1f);
188            g = ((*colour & 0x3e0) >> 5) + ((subscreen->buffer[offset] & 0x3e0) >> 5);
189            b = ((*colour & 0x7c00) >> 10) + ((subscreen->buffer[offset] & 0x7c00) >> 10);
190            clip_max = 1;
191         }
192         else
193         {
194            /* 0x80 sub */
195            r = (*colour & 0x1f) - (subscreen->buffer[offset] & 0x1f);
196            g = ((*colour & 0x3e0) >> 5) - ((subscreen->buffer[offset] & 0x3e0) >> 5);
197            b = ((*colour & 0x7c00) >> 10) - ((subscreen->buffer[offset] & 0x7c00) >> 10);
198            if (r > 0x1f) r = 0;
199            if (g > 0x1f) g = 0;
200            if (b > 0x1f) b = 0;
201         }
202         /* only halve if the color is not the back colour */
203         if (BIT(snes_ppu.color_modes, 6) && (subscreen->buffer[offset] != snes_cgram[FIXED_COLOUR]))
204         {
205            r >>= 1;
206            g >>= 1;
207            b >>= 1;
208         }
209      }
210      else /* Fixed colour */
211      {
212         if (!BIT(snes_ppu.color_modes, 7))
213         {
214            /* 0x00 add */
215            r = (*colour & 0x1f) + (snes_cgram[FIXED_COLOUR] & 0x1f);
216            g = ((*colour & 0x3e0) >> 5) + ((snes_cgram[FIXED_COLOUR] & 0x3e0) >> 5);
217            b = ((*colour & 0x7c00) >> 10) + ((snes_cgram[FIXED_COLOUR] & 0x7c00) >> 10);
218            clip_max = 1;
219         }
220         else
221         {
222            /* 0x80: sub */
223            r = (*colour & 0x1f) - (snes_cgram[FIXED_COLOUR] & 0x1f);
224            g = ((*colour & 0x3e0) >> 5) - ((snes_cgram[FIXED_COLOUR] & 0x3e0) >> 5);
225            b = ((*colour & 0x7c00) >> 10) - ((snes_cgram[FIXED_COLOUR] & 0x7c00) >> 10);
226            if (r > 0x1f) r = 0;
227            if (g > 0x1f) g = 0;
228            if (b > 0x1f) b = 0;
229         }
230         /* halve if necessary */
231         if (BIT(snes_ppu.color_modes, 6))
232         {
233            r >>= 1;
234            g >>= 1;
235            b >>= 1;
236         }
237      }
238
239      /* according to anomie's docs, after addition has been performed, division by 2 happens *before* clipping to max, hence we clip now */
240      if (clip_max)
241      {
242         if (r > 0x1f) r = 0x1f;
243         if (g > 0x1f) g = 0x1f;
244         if (b > 0x1f) b = 0x1f;
245      }
246
247      *colour = ((r & 0x1f) | ((g & 0x1f) << 5) | ((b & 0x1f) << 10));
248   }
249}
250
141251/*****************************************
142252 * snes_draw_tile()
143253 *
144 * Draw BG tiles with variable bit planes
254 * Draw tiles with variable bit planes
145255 *****************************************/
146256
147257INLINE void snes_draw_tile( UINT8 planes, UINT8 layer, UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT8 direct_colors, UINT16 pal, UINT8 hires )
r7640r7641
436546/*****************************************
437547 * snes_draw_tile_object()
438548 *
439 * Draw OAM tiles with 4 bit planes(16 colors)
549 * Draw tiles with 4 bit planes(16 colors)
550 * The same as snes_draw_tile_4() except
551 * that it takes a blend parameter.
440552 *****************************************/
441553
442554INLINE void snes_draw_tile_object( UINT16 tileaddr, INT16 x, UINT8 priority, UINT8 flip, UINT16 pal )
r7640r7641
536648   }
537649}
538650
539/*************************************************************************************************
540 * SNES BG layers
541 *
542 * BG drawing theory of each scanline is quite easy: depending on the graphics Mode (0-7), there
543 * are up to 4 background layers. Pixels for each BG layer can have two different priorities.
544 * Depending on the line and on the BGHOFS and BGVOFS PPU registers, we first determine the tile
545 * address in snes_vram (by determining x,y coord and tile size and by calling snes_get_tmap_addr).
546 * Then, we load the correspondent data and we determine the tile properties: which priority to
547 * use, which palette etc. Finally, for each pixel of the tile appearing on screen, we check if
548 * the tile priority is higher than the BG/OAM already stored in that pixel for that line. If so
549 * we store the pixel in the buffer, otherwise we discard it.
550 *
551 * Of course, depending on the graphics Mode, it might be easier or harder to determine the proper
552 * tile address in vram (Mode 7 uses different registers, Mode 2, 4 and 6 uses OPT effect, etc.),
553 * but in general it works as described.
554 *************************************************************************************************/
555
556651/*********************************************
557652 * snes_get_tmap_addr()
558653 *
r7640r7641
9761071   }
9771072}
9781073
979/*************************************************************************************************
980 * SNES Sprites
1074/*********************************************
1075 * snes_update_objects()
9811076 *
982 * 1. First of all: sprites are drawn one line in advance. We emulate this by caching the
983 * starting vram address, the sprite size and the "name select" at each line, and by using
984 * them the next line to output the proper sprites - see snes_update_obsel.
985 *
986 * 2. Each line can select its sprites among 128 available ones in oam_ram, hence we start
987 * by creating a list of the available objects (each one with its x,y coordinate, its size,
988 * its tile address, etc.) - see snes_oam_list_build.
989 *
990 * 3. Next, we start finding out which sprites will appear in the line: starting from
991 * FirstSprite, we count 32 OBJs which intersect our line and we store their indexes in the
992 * oam_itemlist array (if more than 32 sprites intersect our line, we set the Range Over
993 * flag); then, selecting among these sprites, we count 34 8x8 tiles which are visible
994 * in our line (i.e. whose x coord is between -size and 256) and we store the corresponding
995 * coordinates/priorities/palettes/etc. in the oam_tilelist array (if more than 34 tiles would
996 * appear on screen, we set the Time Over flag).
997 * Notice that when we populate oam_tilelist, we proceed from oam_itemlist[31] (or from the last
998 * item which intersects the scanline), towards oam_itemlist[0], i.e. the higher tiles (say
999 * oam_tilelist[34], or the last tile which appear on screen) will contain FirstSprite object,
1000 * or the sprites with closer index to FirstSprite which get displayed. This will play an
1001 * important role for sprite priority - see snes_update_objects_rto.
1002 *
1003 * 4. All the above happens at the beginning of each VIDEO_UPDATE. When we finally draw the
1004 * scanline, we pass through the oam_tilelist and we store the displayed pixels in our scanline
1005 * buffer. Notice that, for each pixel of a SNES sprite, only the priority of the topmost sprite
1006 * is tested against the priority of the BG pixel (because FirstSprite is on top of FirstSprite+1,
1007 * which is on top of FirstSprite+2, etc., and therefore other sprites are already covered by the
1008 * topmost one). To emulate this, we draw each tile over the previous ones no matter what
1009 * priorities are (differently from what we did with BGs): in the end, we will have in each pixel z
1010 * its topmost sprite and scanline.priority[z] will be the topmost sprite priority as expected.
1011 * Of course, sprite drawing must happen before BG drawing, so that afterwords BG pixels properly
1012 * test their priority with the one of the correct sprite - see snes_update_objects.
1013 *************************************************************************************************/
1077 * Update an entire line of sprites.
1078 * FIXME: We need to support high priority bit
1079 *********************************************/
10141080
10151081struct OAM
10161082{
r7640r7641
10221088
10231089static struct OAM oam_spritelist[SNES_SCR_WIDTH / 2];
10241090
1025static UINT8 oam_itemlist[32];
1026
1027struct TILELIST {
1028   INT16 x;
1029   UINT16 priority, pal, tileaddr;
1030   int hflip;
1031};
1032
1033struct TILELIST oam_tilelist[34];
1034
1035/*********************************************
1036 * snes_update_obsel()
1037 *
1038 * Update sprite settings for next line.
1039 *********************************************/
1040
10411091static void snes_update_obsel( void )
10421092{
10431093   snes_ppu.layer[SNES_OAM].charmap = snes_ppu.oam.next_charmap;
r7640r7641
10501100   }
10511101}
10521102
1053/*********************************************
1054 * snes_oam_list_build()
1055 *
1056 * Build a list of the available obj in OAM ram.
1057 *********************************************/
1058
10591103static void snes_oam_list_build( void )
10601104{
10611105   UINT8 *oamram = (UINT8 *)snes_oam;
10621106   INT16 oam = 0x1ff;
10631107   UINT16 oam_extra = oam + 0x20;
10641108   UINT16 extra = 0;
1065   int ii;
1109   int i;
10661110
10671111   snes_ppu.update_oam_list = 0;      // eventually, we can optimize the code by only calling this function when there is a change in size
10681112
1069   for (ii = 127; ii >= 0; ii--)
1113   for (i = 127; i >= 0; i--)
10701114   {
1071      if (((ii + 1) % 4) == 0)
1115      if (((i + 1) % 4) == 0)
10721116         extra = oamram[oam_extra--];
10731117
1074      oam_spritelist[ii].vflip = (oamram[oam] & 0x80) >> 7;
1075      oam_spritelist[ii].hflip = (oamram[oam] & 0x40) >> 6;
1076      oam_spritelist[ii].priority_bits = (oamram[oam] & 0x30) >> 4;
1077      oam_spritelist[ii].pal = 128 + ((oamram[oam] & 0x0e) << 3);
1078      oam_spritelist[ii].tile = (oamram[oam--] & 0x1) << 8;
1079      oam_spritelist[ii].tile |= oamram[oam--];
1080      oam_spritelist[ii].y = oamram[oam--] + 1;   /* We seem to need to add one here.... */
1081      oam_spritelist[ii].x = oamram[oam--];
1082      oam_spritelist[ii].size = (extra & 0x80) >> 7;
1118      oam_spritelist[i].vflip = (oamram[oam] & 0x80) >> 7;
1119      oam_spritelist[i].hflip = (oamram[oam] & 0x40) >> 6;
1120      oam_spritelist[i].priority_bits = (oamram[oam] & 0x30) >> 4;
1121      oam_spritelist[i].pal = 128 + ((oamram[oam] & 0x0e) << 3);
1122      oam_spritelist[i].tile = (oamram[oam--] & 0x1) << 8;
1123      oam_spritelist[i].tile |= oamram[oam--];
1124      oam_spritelist[i].y = oamram[oam--] + 1;   /* We seem to need to add one here.... */
1125      oam_spritelist[i].x = oamram[oam--];
1126      oam_spritelist[i].size = (extra & 0x80) >> 7;
10831127      extra <<= 1;
1084      oam_spritelist[ii].x |= ((extra & 0x80) << 1);
1128      oam_spritelist[i].x |= ((extra & 0x80) << 1);
10851129      extra <<= 1;
10861130
1087      oam_spritelist[ii].y *= snes_ppu.obj_interlace;
1131      oam_spritelist[i].y *= snes_ppu.obj_interlace;
10881132
10891133      /* Adjust if past maximum position */
1090      if (oam_spritelist[ii].y >= snes_ppu.beam.last_visible_line * snes_ppu.interlace)
1091         oam_spritelist[ii].y -= 256 * snes_ppu.interlace;
1134      if (oam_spritelist[i].y >= snes_ppu.beam.last_visible_line * snes_ppu.interlace)
1135         oam_spritelist[i].y -= 256 * snes_ppu.interlace;
10921136
1093      oam_spritelist[ii].x &= 0x1ff;
1137      oam_spritelist[i].x &= 0x1ff;
10941138
10951139      /* Determine object size */
10961140      switch (snes_ppu.oam.size)
10971141      {
10981142      case 0:         /* 8x8 or 16x16 */
1099         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 2 : 1;
1100         oam_spritelist[ii].height = oam_spritelist[ii].size ? 2 : 1;
1143         oam_spritelist[i].width  = oam_spritelist[i].size ? 2 : 1;
1144         oam_spritelist[i].height = oam_spritelist[i].size ? 2 : 1;
11011145         break;
11021146      case 1:         /* 8x8 or 32x32 */
1103         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 4 : 1;
1104         oam_spritelist[ii].height = oam_spritelist[ii].size ? 4 : 1;
1147         oam_spritelist[i].width  = oam_spritelist[i].size ? 4 : 1;
1148         oam_spritelist[i].height = oam_spritelist[i].size ? 4 : 1;
11051149         break;
11061150      case 2:         /* 8x8 or 64x64 */
1107         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 8 : 1;
1108         oam_spritelist[ii].height = oam_spritelist[ii].size ? 8 : 1;
1151         oam_spritelist[i].width  = oam_spritelist[i].size ? 8 : 1;
1152         oam_spritelist[i].height = oam_spritelist[i].size ? 8 : 1;
11091153         break;
11101154      case 3:         /* 16x16 or 32x32 */
1111         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 4 : 2;
1112         oam_spritelist[ii].height = oam_spritelist[ii].size ? 4 : 2;
1155         oam_spritelist[i].width  = oam_spritelist[i].size ? 4 : 2;
1156         oam_spritelist[i].height = oam_spritelist[i].size ? 4 : 2;
11131157         break;
11141158      case 4:         /* 16x16 or 64x64 */
1115         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 8 : 2;
1116         oam_spritelist[ii].height = oam_spritelist[ii].size ? 8 : 2;
1159         oam_spritelist[i].width  = oam_spritelist[i].size ? 8 : 2;
1160         oam_spritelist[i].height = oam_spritelist[i].size ? 8 : 2;
11171161         break;
11181162      case 5:         /* 32x32 or 64x64 */
1119         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 8 : 4;
1120         oam_spritelist[ii].height = oam_spritelist[ii].size ? 8 : 4;
1163         oam_spritelist[i].width  = oam_spritelist[i].size ? 8 : 4;
1164         oam_spritelist[i].height = oam_spritelist[i].size ? 8 : 4;
11211165         break;
11221166      case 6:         /* undocumented: 16x32 or 32x64 */
1123         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 4 : 2;
1124         oam_spritelist[ii].height = oam_spritelist[ii].size ? 8 : 4;
1125         if (snes_ppu.obj_interlace && !oam_spritelist[ii].size)
1126            oam_spritelist[ii].height = 2;
1167         oam_spritelist[i].width  = oam_spritelist[i].size ? 4 : 2;
1168         oam_spritelist[i].height = oam_spritelist[i].size ? 8 : 4;
1169         if (snes_ppu.obj_interlace && !oam_spritelist[i].size)
1170            oam_spritelist[i].height = 2;
11271171         break;
11281172      case 7:         /* undocumented: 16x32 or 32x32 */
1129         oam_spritelist[ii].width  = oam_spritelist[ii].size ? 4 : 2;
1130         oam_spritelist[ii].height = oam_spritelist[ii].size ? 4 : 4;
1131         if (snes_ppu.obj_interlace && !oam_spritelist[ii].size)
1132            oam_spritelist[ii].height = 2;
1173         oam_spritelist[i].width  = oam_spritelist[i].size ? 4 : 2;
1174         oam_spritelist[i].height = oam_spritelist[i].size ? 4 : 4;
1175         if (snes_ppu.obj_interlace && !oam_spritelist[i].size)
1176            oam_spritelist[i].height = 2;
11331177         break;
11341178      default:
11351179         /* we should never enter here... */
r7640r7641
11391183   }
11401184}
11411185
1142/*********************************************
1143 * is_sprite_on_scanline()
1144 *
1145 * Check if a given sprites intersect current
1146 * scanline
1147 *********************************************/
1186static UINT8 oam_itemlist[32];
11481187
1188struct TILELIST {
1189   INT16 x;
1190   UINT16 priority, pal, tileaddr;
1191   int hflip;
1192};
1193
1194struct TILELIST oam_tilelist[34];
1195
11491196static int is_sprite_on_scanline( UINT16 curline, UINT8 sprite )
11501197{
11511198   //if sprite is entirely offscreen and doesn't wrap around to the left side of the screen,
r7640r7641
11641211   return 0;
11651212}
11661213
1167/*********************************************
1168 * snes_update_objects_rto()
1169 *
1170 * Determine which OBJs will be drawn on this
1171 * scanline.
1172 *********************************************/
1173
11741214static void snes_update_objects_rto( UINT16 curline )
11751215{
1176   int ii, jj, active_sprite;
1216   int active_sprite;
11771217   UINT8 range_over, time_over;
11781218   INT8 xs, ys;
11791219   UINT8 line;
11801220   UINT8 height, width, vflip, hflip, priority, pal;
11811221   UINT16 tile;
1182   INT16 x, y;
1222   INT16 i, x, y;
11831223   UINT32 name_sel = 0;
11841224
11851225   snes_oam_list_build();
r7640r7641
11961236   memset(oam_itemlist, 0xff, 32);
11971237
11981238   /* populate the list of 32 objects */
1199   for (ii = 0; ii < 128; ii++)
1239   for (i = 0; i < 128; i++)
12001240   {
1201      active_sprite = (ii + snes_ppu.oam.first_sprite) & 0x7f;
1241      active_sprite = (i + snes_ppu.oam.first_sprite) & 0x7f;
12021242
12031243      if (!is_sprite_on_scanline(curline, active_sprite))
12041244         continue;
r7640r7641
12101250   }
12111251
12121252   /* reset the list of first 34 tiles to be drawn */
1213   for (ii = 0; ii < 34; ii++)
1214      oam_tilelist[ii].tileaddr = 0xffff;
1253   for (i = 0; i < 34; i++)
1254      oam_tilelist[i].tileaddr = 0xffff;
12151255
12161256   /* populate the list of 34 tiles */
1217   for (ii = 31; ii >= 0; ii--)
1257   for (i = 31; i >= 0; i--)
12181258   {
1219      if (oam_itemlist[ii] == 0xff)
1259      if (oam_itemlist[i] == 0xff)
12201260         continue;
12211261
1222      active_sprite = oam_itemlist[ii];
1262      active_sprite = oam_itemlist[i];
12231263
12241264      tile = oam_spritelist[active_sprite].tile;
12251265      x = oam_spritelist[active_sprite].x;
r7640r7641
12441284      line <<= 1;
12451285      tile <<= 5;
12461286
1247      for (jj = 0; jj < width; jj++)
1287      int ii;
1288
1289      for (ii = 0; ii < width; ii++)
12481290      {
1249         INT16 xx = (x + (jj << 3)) & 0x1ff;
1291         INT16 xx = (x + (ii << 3)) & 0x1ff;
12501292
12511293         if (x != 256 && xx >= 256 && (xx + 7) < 512)
12521294            continue;
r7640r7641
12541296         if (time_over++ >= 34)
12551297            break;
12561298
1257         xs = (hflip) ? (width - 1 - jj) : jj;
1299         xs = (hflip) ? (width - 1 - ii) : ii;
12581300         oam_tilelist[time_over - 1].tileaddr = name_sel + tile + table_obj_offset[ys][xs] + line;
12591301         oam_tilelist[time_over - 1].hflip = hflip;
12601302         oam_tilelist[time_over - 1].x = xx;
r7640r7641
12721314      snes_ppu.stat77_flags |= 0x80;
12731315}
12741316
1275/*********************************************
1276 * snes_update_objects()
1277 *
1278 * Update an entire line of sprites.
1279 *********************************************/
1280
12811317static void snes_update_objects( UINT8 priority_oam0, UINT8 priority_oam1, UINT8 priority_oam2, UINT8 priority_oam3 )
12821318{
12831319   UINT8 pri, priority[4];
12841320   UINT32 charaddr;
1285   int ii;
1321   int i;
12861322
12871323#ifdef SNES_LAYER_DEBUG
12881324   if (debug_options.bg_disabled[SNES_OAM])
r7640r7641
13051341   priority[3] = priority_oam3;
13061342
13071343   /* finally draw the tiles from the tilelist */
1308   for (ii = 0; ii < 34; ii++)
1344   for (i = 0; i < 34; i++)
13091345   {
1310      int tile = ii;
1346      int tile = i;
13111347#ifdef SNES_LAYER_DEBUG
13121348      if (debug_options.sprite_reversed)
1313         tile = 33 - ii;
1349         tile = 33 - i;
13141350#endif /* SNES_LAYER_DEBUG */
13151351
13161352      if (oam_tilelist[tile].tileaddr == 0xffff)
r7640r7641
15581594 * snes_update_offsets()
15591595 *
15601596 * Update the offsets with the latest changes.
1561 * This is currently unused, but it could
1562 * possibly be handy for some minor optimization
15631597 *********************************************/
15641598
15651599static void snes_update_offsets( void )
r7640r7641
15711605   snes_ppu.update_offsets = 0;
15721606}
15731607
1574/*****************************************
1575 * snes_draw_blend()
1576 *
1577 * Routine for additive/subtractive blending
1578 * between the main and sub screens, i.e.
1579 * color math.
1580 *****************************************/
1581
1582INLINE void snes_draw_blend( UINT16 offset, UINT16 *colour, UINT8 prevent_color_math, UINT8 black_pen_clip, int switch_screens )
1583{
1584#ifdef SNES_LAYER_DEBUG
1585   if (debug_options.colormath_disabled)
1586      return;
1587#endif /* SNES_LAYER_DEBUG */
1588
1589   /* when color math is applied to subscreen pixels, the blending depends on the blending used by the previous mainscreen
1590    pixel, except for subscreen pixel 0 which has no previous mainscreen pixel, see comments in snes_refresh_scanline */
1591   if (switch_screens && offset > 0)
1592      offset -= 1;
1593
1594   if ((black_pen_clip == SNES_CLIP_ALWAYS) ||
1595      (black_pen_clip == SNES_CLIP_IN && snes_ppu.clipmasks[SNES_COLOR][offset]) ||
1596      (black_pen_clip == SNES_CLIP_OUT && !snes_ppu.clipmasks[SNES_COLOR][offset]))
1597      *colour = 0; //clip to black before color math
1598
1599   if (prevent_color_math == SNES_CLIP_ALWAYS) // blending mode 3 == always OFF
1600      return;
1601
1602   if ((prevent_color_math == SNES_CLIP_NEVER) ||
1603      (prevent_color_math == SNES_CLIP_IN  && !snes_ppu.clipmasks[SNES_COLOR][offset]) ||
1604      (prevent_color_math == SNES_CLIP_OUT && snes_ppu.clipmasks[SNES_COLOR][offset]))
1605   {
1606      UINT16 r, g, b;
1607      struct SCANLINE *subscreen;
1608      int clip_max = 0;   // if add then clip to 0x1f, if sub then clip to 0
1609
1610#ifdef SNES_LAYER_DEBUG
1611      /* Toggle drawing of SNES_SUBSCREEN or SNES_MAINSCREEN */
1612      if (debug_options.draw_subscreen)
1613      {
1614         subscreen = switch_screens ? &scanlines[SNES_SUBSCREEN] : &scanlines[SNES_MAINSCREEN];
1615      }
1616      else
1617#endif /* SNES_LAYER_DEBUG */
1618      {
1619         subscreen = switch_screens ? &scanlines[SNES_MAINSCREEN] : &scanlines[SNES_SUBSCREEN];
1620      }
1621
1622      if (snes_ppu.sub_add_mode) /* SNES_SUBSCREEN*/
1623      {
1624         if (!BIT(snes_ppu.color_modes, 7))
1625         {
1626            /* 0x00 add */
1627            r = (*colour & 0x1f) + (subscreen->buffer[offset] & 0x1f);
1628            g = ((*colour & 0x3e0) >> 5) + ((subscreen->buffer[offset] & 0x3e0) >> 5);
1629            b = ((*colour & 0x7c00) >> 10) + ((subscreen->buffer[offset] & 0x7c00) >> 10);
1630            clip_max = 1;
1631         }
1632         else
1633         {
1634            /* 0x80 sub */
1635            r = (*colour & 0x1f) - (subscreen->buffer[offset] & 0x1f);
1636            g = ((*colour & 0x3e0) >> 5) - ((subscreen->buffer[offset] & 0x3e0) >> 5);
1637            b = ((*colour & 0x7c00) >> 10) - ((subscreen->buffer[offset] & 0x7c00) >> 10);
1638            if (r > 0x1f) r = 0;
1639            if (g > 0x1f) g = 0;
1640            if (b > 0x1f) b = 0;
1641         }
1642         /* only halve if the color is not the back colour */
1643         if (BIT(snes_ppu.color_modes, 6) && (subscreen->buffer[offset] != snes_cgram[FIXED_COLOUR]))
1644         {
1645            r >>= 1;
1646            g >>= 1;
1647            b >>= 1;
1648         }
1649      }
1650      else /* Fixed colour */
1651      {
1652         if (!BIT(snes_ppu.color_modes, 7))
1653         {
1654            /* 0x00 add */
1655            r = (*colour & 0x1f) + (snes_cgram[FIXED_COLOUR] & 0x1f);
1656            g = ((*colour & 0x3e0) >> 5) + ((snes_cgram[FIXED_COLOUR] & 0x3e0) >> 5);
1657            b = ((*colour & 0x7c00) >> 10) + ((snes_cgram[FIXED_COLOUR] & 0x7c00) >> 10);
1658            clip_max = 1;
1659         }
1660         else
1661         {
1662            /* 0x80: sub */
1663            r = (*colour & 0x1f) - (snes_cgram[FIXED_COLOUR] & 0x1f);
1664            g = ((*colour & 0x3e0) >> 5) - ((snes_cgram[FIXED_COLOUR] & 0x3e0) >> 5);
1665            b = ((*colour & 0x7c00) >> 10) - ((snes_cgram[FIXED_COLOUR] & 0x7c00) >> 10);
1666            if (r > 0x1f) r = 0;
1667            if (g > 0x1f) g = 0;
1668            if (b > 0x1f) b = 0;
1669         }
1670         /* halve if necessary */
1671         if (BIT(snes_ppu.color_modes, 6))
1672         {
1673            r >>= 1;
1674            g >>= 1;
1675            b >>= 1;
1676         }
1677      }
1678
1679      /* according to anomie's docs, after addition has been performed, division by 2 happens *before* clipping to max, hence we clip now */
1680      if (clip_max)
1681      {
1682         if (r > 0x1f) r = 0x1f;
1683         if (g > 0x1f) g = 0x1f;
1684         if (b > 0x1f) b = 0x1f;
1685      }
1686
1687      *colour = ((r & 0x1f) | ((g & 0x1f) << 5) | ((b & 0x1f) << 10));
1688   }
1689}
1690
16911608/*********************************************
16921609 * snes_refresh_scanline()
16931610 *
16941611 * Redraw the current line.
16951612 *********************************************/
1696/*********************************************
1697 * Notice that in hires and pseudo hires modes,
1698 * i.e. when 512 different pixels are present
1699 * in a scanline, a crt TV monitor would end
1700 * up blending adjacent pixels. To mimic this,
1701 * we add a small (optional) hack which enters
1702 * only in the very last stage of the scanline
1703 * drawing and which simulates the TV by
1704 * replacing the exact pixel color with an
1705 * average of the current and next pixel colors.
1706 * Credits (and thanks) to Blargg and Byuu for
1707 * the optimized averaging algorithm.
1708 *********************************************/
17091613
17101614static void snes_refresh_scanline( running_machine *machine, bitmap_t *bitmap, UINT16 curline )
17111615{
r7640r7641
17151619   struct SCANLINE *scanline1, *scanline2;
17161620   UINT16 c;
17171621   UINT16 prev_colour = 0;
1718   int blurring = input_port_read_safe(machine, "OPTIONS", 0) & 0x01;
1622   int average = input_port_read_safe(machine, "OPTIONS", 0) & 0x01;
17191623
17201624   profiler_mark_start(PROFILER_VIDEO);
17211625
r7640r7641
18221726            /* prepare the pixel from sub screen */
18231727            c = scanline2->buffer[x];
18241728
1825            /* in hires/pseudo-hires, subscreen pixels are blended as well: for each subscreen pixel, color math
1826                is applied if it had been applied to the previous mainscreen pixel. What happens at subscreen pixel 0
1827                (which has no previous mainscreen pixel) is undocumented. Until more info are discovered, we (arbitrarily)
1828                apply to it the same color math as the *next* mainscreen pixel (i.e. mainscreen pixel 0), which seems as good as
1829                any other choice */
1729            /* in hires, subscreen pixels are blended as well: for each subscreen pixel, color math is applied if
1730                it had been applied to the previous mainscreen pixel. What happens at subscreen pixel 0 (which has no
1731                previous mainscreen pixel) is undocumented. Until more info are discovered, we (arbitrarily) apply to it
1732                the same color math as the *next* mainscreen pixel (i.e. mainscreen pixel 0) */
18301733            if (x == 0 && !scanline1->blend_exception[0] && snes_ppu.layer[scanline1->layer[0]].color_math)
18311734               snes_draw_blend(0, &c, snes_ppu.prevent_color_math, snes_ppu.clip_to_black, 1);
18321735            else if (x > 0  && !scanline1->blend_exception[x - 1] && snes_ppu.layer[scanline1->layer[x - 1]].color_math)
r7640r7641
18351738            tmp_col[0] = c;
18361739
18371740            /* average the first pixel if required, or draw it directly*/
1838            if (blurring)
1839               c = (prev_colour + tmp_col[0] - ((prev_colour ^ tmp_col[0]) & 0x0421)) >> 1;   // Hack code to mimic TV pixel blurring
1741            if (average)
1742               c = (prev_colour + tmp_col[0] - ((prev_colour ^ tmp_col[0]) & 0x0421)) >> 1;
18401743            else
18411744               c = tmp_col[0];
18421745
r7640r7641
18471750            *BITMAP_ADDR32(bitmap, curline, x * 2 + 0) = MAKE_RGB(pal5bit(r), pal5bit(g), pal5bit(b));
18481751            prev_colour = tmp_col[0];
18491752
1753
18501754            /* average the second pixel if required, or draw it directly*/
1851            if (blurring)
1852               c = (prev_colour + tmp_col[1] - ((prev_colour ^ tmp_col[1]) & 0x0421)) >> 1;   // Hack code to mimic TV pixel blurring
1755            if (average)
1756               c = (prev_colour + tmp_col[1] - ((prev_colour ^ tmp_col[1]) & 0x0421)) >> 1;
18531757            else
18541758               c = tmp_col[1];
18551759
src/mame/video/pastelg.c
r7640r7641
102102   pastelg_gfxrom = (data & 0x3);
103103}
104104
105WRITE8_HANDLER( threeds_output_w )
106{
107   pastelg_palbank = ((data & 0x10) >> 4);
105108
109}
110
111READ8_HANDLER( threeds_rom_readback_r )
112{
113   UINT8 *GFX = memory_region(space->machine, "gfx1");
114
115   return GFX[(blitter_src_addr | (pastelg_gfxrom << 16)) & 0x3ffff];
116}
117
118
106119WRITE8_HANDLER( pastelg_romsel_w )
107120{
108121   int gfxlen = memory_region_length(space->machine, "gfx1");
r7640r7641
257270         }
258271         else
259272         {
260            color = ((pastelg_palbank * 0x10) + pastelg_clut[color]);
261            pastelg_videoram[(dy * width) + dx] = color;
273            if(pastelg_clut[color] != 0)
274            {
275               color = ((pastelg_palbank * 0x10) + pastelg_clut[color]);
276               pastelg_videoram[(dy * width) + dx] = color;
277            }
262278         }
263279
264280         nb1413m3_busyctr++;
src/mame/video/metro.c
r7640r7641
5252***************************************************************************/
5353
5454#include "emu.h"
55#include "includes/metro.h"
5556#include "video/konicdev.h"
5657
57/* Variables that driver has access to: */
58
59UINT16 *metro_videoregs;
60UINT16 *metro_screenctrl;
61UINT16 *metro_scroll;
62UINT16 *metro_tiletable;
63size_t metro_tiletable_size;
64UINT16 *metro_vram_0,*metro_vram_1,*metro_vram_2;
65UINT16 *metro_window;
66
67static int support_8bpp,support_16x16;
68static int has_zoom;
69
70
71UINT16 *metro_K053936_ram;
72static tilemap_t *metro_K053936_tilemap;
73
74static UINT16 *metro_tiletable_old;
75static UINT8 *dirtyindex;
76
77
78static TILE_GET_INFO( metro_K053936_get_tile_info )
58static TILE_GET_INFO( metro_k053936_get_tile_info )
7959{
80   int code = metro_K053936_ram[tile_index];
60   metro_state *state = (metro_state *)machine->driver_data;
61   int code = state->k053936_ram[tile_index];
8162
8263   SET_TILE_INFO(
8364         2,
r7640r7641
8667         0);
8768}
8869
89static TILE_GET_INFO( metro_K053936_gstrik2_get_tile_info )
70static TILE_GET_INFO( metro_k053936_gstrik2_get_tile_info )
9071{
91   int code = metro_K053936_ram[tile_index];
72   metro_state *state = (metro_state *)machine->driver_data;
73   int code = state->k053936_ram[tile_index];
9274
9375   SET_TILE_INFO(
9476         2,
r7640r7641
9779         0);
9880}
9981
100WRITE16_HANDLER( metro_K053936_w )
82WRITE16_HANDLER( metro_k053936_w )
10183{
102   COMBINE_DATA(&metro_K053936_ram[offset]);
103   tilemap_mark_tile_dirty(metro_K053936_tilemap,offset);
84   metro_state *state = (metro_state *)space->machine->driver_data;
85   COMBINE_DATA(&state->k053936_ram[offset]);
86   tilemap_mark_tile_dirty(state->k053936_tilemap, offset);
10487}
10588
10689static TILEMAP_MAPPER( tilemap_scan_gstrik2 )
r7640r7641
10891   /* logical (col,row) -> memory offset */
10992   int val;
11093
111   val = (row&0x3f)*(256*2) + (col*2);
94   val = (row & 0x3f) * (256 * 2) + (col * 2);
11295
113   if (row&0x40) val+=1;
114   if (row&0x80) val+=256;
96   if (row & 0x40) val += 1;
97   if (row & 0x80) val += 256;
11598
11699   return val;
117100}
118101
119102
120/***************************************************************************
121103
122
123                            Palette GGGGGRRRRRBBBBBx
124
125
126***************************************************************************/
127
128#ifdef UNUSED_FUNCTION
129WRITE16_HANDLER( metro_paletteram_w )
130{
131   data = COMBINE_DATA(&space->machine->generic.paletteram.u16[offset]);
132   palette_set_color_rgb(space->machine,offset,pal5bit(data >> 6),pal5bit(data >> 11),pal5bit(data >> 1));
133}
134#endif
135
136
137104/***************************************************************************
138105
139106
r7640r7641
163130
164131***************************************************************************/
165132
166static tilemap_t *bg_tilemap[3];
167static tilemap_t *tilemap_16x16[3];
168static UINT8 *empty_tiles;
169
170133/* A 2048 x 2048 virtual tilemap */
171
172134#define BIG_NX      (0x100)
173135#define BIG_NY      (0x100)
174136
r7640r7641
176138
177139#define WIN_NX      (0x40)
178140#define WIN_NY      (0x20)
179//#define WIN_NX        (0x40+1)
180//#define WIN_NY        (0x20+1)
181141
182
183/* 8x8x4 tiles only */
184INLINE void get_tile_info(running_machine *machine,tile_data *tileinfo,int tile_index,int layer,UINT16 *vram)
142// this looks up a single pixel in a tile, given the code
143// the metro hardware has an indirection table, which is used here
144// returns if to draw the pixel or not, pixel colour is placed in pix
145INLINE UINT8 get_tile_pix( running_machine *machine, UINT16 code, UINT8 x, UINT8 y, int big, UINT16* pix )
185146{
186   UINT16 code;
187   int      table_index;
188   UINT32   tile;
147   metro_state *state = (metro_state *)machine->driver_data;
148   int table_index;
149   UINT32 tile;
189150
190   /* The actual tile index depends on the window */
191   tile_index   =   ((tile_index / WIN_NX + metro_window[layer * 2 + 0] / 8) % BIG_NY) * BIG_NX +
192               ((tile_index % WIN_NX + metro_window[layer * 2 + 1] / 8) % BIG_NX);
151   /* Use code as an index into the tiles set table */
152   table_index = ((code & 0x1ff0) >> 4) * 2;
153   tile = (state->tiletable[table_index + 0] << 16) + state->tiletable[table_index + 1];
193154
194   /* Fetch the code */
195   code         =   vram[ tile_index ];
196
197   /* Use it as an index into the tiles set table */
198   table_index      =   ( (code & 0x1ff0) >> 4 ) * 2;
199   tile         =   (metro_tiletable[table_index + 0] << 16 ) +
200                   metro_tiletable[table_index + 1];
201
202155   if (code & 0x8000) /* Special: draw a tile of a single color (i.e. not from the gfx ROMs) */
203156   {
204      int _code = code & 0x000f;
205      tileinfo->pen_data = empty_tiles + _code*16*16;
206      tileinfo->palette_base = ((code & 0x0ff0)) + 0x1000;
207      tileinfo->flags = 0;
208      tileinfo->group = 0;
157      *pix = (code & 0x0fff)+0x1000;
158
159      if ((*pix & 0xf) != 0xf)
160         return 1;
161      else
162         return 0;
163
209164   }
210   else
165   else if (((tile & 0x00f00000) == 0x00f00000)   && (state->support_8bpp)) /* draw tile as 8bpp */
211166   {
212      tileinfo->group = 0;
213      SET_TILE_INFO(
214            0,
215            (tile & 0xfffff) + (code & 0xf),
216            (((tile & 0x0ff00000) >> 20)) + 0x100,
217            TILE_FLIPXY((code & 0x6000) >> 13));
218   }
219}
167      const gfx_element *gfx1 = machine->gfx[big?3:1];
168      UINT32 tile2 = big ? ((tile & 0xfffff) + 8*(code & 0xf)) :
169                          ((tile & 0xfffff) + 2*(code & 0xf));
170      const UINT8* data;
171      UINT8 flipxy = (code & 0x6000) >> 13;
220172
173      if (tile2 < gfx1->total_elements)
174         data = gfx_element_get_data(gfx1, tile2);
175      else
176      {
177         *pix |= 0;
178         return 0;
179      }
221180
222/* 8x8x4 or 8x8x8 tiles. It's the tile's color that decides: if its low 4
223   bits are high ($f,$1f,$2f etc) the tile is 8bpp, otherwise it's 4bpp */
224INLINE void get_tile_info_8bit(running_machine *machine,tile_data *tileinfo,int tile_index,int layer,UINT16 *vram)
225{
226   UINT16 code;
227   int      table_index;
228   UINT32   tile;
181      switch (flipxy)
182      {
183         default:
184         case 0x0: *pix = data[(y              * (big?16:8)) + x];              break;
185         case 0x1: *pix = data[(((big?15:7)-y) * (big?16:8)) + x];              break;
186         case 0x2: *pix = data[(y              * (big?16:8)) + ((big?15:7)-x)]; break;
187         case 0x3: *pix = data[(((big?15:7)-y) * (big?16:8)) + ((big?15:7)-x)]; break;
188      }
229189
230   /* The actual tile index depends on the window */
231   tile_index   =   ((tile_index / WIN_NX + metro_window[layer * 2 + 0] / 8) % BIG_NY) * BIG_NX +
232               ((tile_index % WIN_NX + metro_window[layer * 2 + 1] / 8) % BIG_NX);
190      *pix |= ((((tile & 0x0f000000) >> 24) + 0x10)*0x100);
233191
234   /* Fetch the code */
235   code         =   vram[ tile_index ];
192      if ((*pix & 0xff) != 0xff)
193         return 1;
194      else
195         return 0;
236196
237   /* Use it as an index into the tiles set table */
238   table_index      =   ( (code & 0x1ff0) >> 4 ) * 2;
239   tile         =   (metro_tiletable[table_index + 0] << 16 ) +
240                   metro_tiletable[table_index + 1];
241
242   if (code & 0x8000) /* Special: draw a tile of a single color (i.e. not from the gfx ROMs) */
243   {
244      int _code = code & 0x000f;
245      tileinfo->pen_data = empty_tiles + _code*16*16;
246      tileinfo->palette_base = ((code & 0x0ff0)) + 0x1000;
247      tileinfo->flags = 0;
248      tileinfo->group = 0;
249197   }
250   else if ((tile & 0x00f00000)==0x00f00000)   /* draw tile as 8bpp */
251   {
252      tileinfo->group = 1;
253      SET_TILE_INFO(
254            1,
255            (tile & 0xfffff) + 2*(code & 0xf),
256            ((tile & 0x0f000000) >> 24) + 0x10,
257            TILE_FLIPXY((code & 0x6000) >> 13));
258   }
259198   else
260199   {
261      tileinfo->group = 0;
262      SET_TILE_INFO(
263            0,
264            (tile & 0xfffff) + (code & 0xf),
265            (((tile & 0x0ff00000) >> 20)) + 0x100,
266            TILE_FLIPXY((code & 0x6000) >> 13));
267   }
268}
200      const gfx_element *gfx1 = machine->gfx[big?2:0];
201      UINT32 tile2 = big ? ((tile & 0xfffff) + 4*(code & 0xf)) :
202                          ((tile & 0xfffff) +   (code & 0xf));
203      const UINT8* data;
204      UINT8 flipxy = (code & 0x6000) >> 13;
269205
270/* 16x16x4 or 16x16x8 tiles. It's the tile's color that decides: if its low 4
271   bits are high ($f,$1f,$2f etc) the tile is 8bpp, otherwise it's 4bpp */
272INLINE void get_tile_info_16x16_8bit(running_machine *machine,tile_data *tileinfo,int tile_index,int layer,UINT16 *vram)
273{
274   UINT16 code;
275   int      table_index;
276   UINT32   tile;
206      if (tile2 < gfx1->total_elements)
207         data = gfx_element_get_data(gfx1, tile2);
208      else
209      {
210         *pix |= 0;
211         return 0;
212      }
277213
278   /* The actual tile index depends on the window */
279   tile_index   =   ((tile_index / WIN_NX + metro_window[layer * 2 + 0] / 8) % BIG_NY) * BIG_NX +
280               ((tile_index % WIN_NX + metro_window[layer * 2 + 1] / 8) % BIG_NX);
281214
282   /* Fetch the code */
283   code         =   vram[ tile_index ];
215      switch (flipxy)
216      {
217         default:
218         case 0x0: *pix = data[(y              * (big?8:4)) + (x>>1)];             break;
219         case 0x1: *pix = data[(((big?15:7)-y) * (big?8:4)) + (x>>1)];             break;
220         case 0x2: *pix = data[(y              * (big?8:4)) + ((big?7:3)-(x>>1))]; break;
221         case 0x3: *pix = data[(((big?15:7)-y) * (big?8:4)) + ((big?7:3)-(x>>1))]; break;
222      }
284223
285   /* Use it as an index into the tiles set table */
286   table_index      =   ( (code & 0x1ff0) >> 4 ) * 2;
287   tile         =   (metro_tiletable[table_index + 0] << 16 ) +
288                   metro_tiletable[table_index + 1];
224      if (!(flipxy&2))
225      {
226         if (x&1) *pix >>= 4;
227         else *pix &= 0xf;
228      }
229      else
230      {
231         if (x&1) *pix  &= 0xf;
232         else *pix >>= 4;
233      }
289234
290   if (code & 0x8000) /* Special: draw a tile of a single color (i.e. not from the gfx ROMs) */
291   {
292      int _code = code & 0x000f;
293      tileinfo->pen_data = empty_tiles + _code*16*16;
294      tileinfo->palette_base = ((code & 0x0ff0)) + 0x1000;
295      tileinfo->flags = 0;
296      tileinfo->group = 0;
297   }
298   else if ((tile & 0x00f00000)==0x00f00000)   /* draw tile as 8bpp */
299   {
300      tileinfo->group = 1;
301      SET_TILE_INFO(
302            3,
303            (tile & 0xfffff) + 8*(code & 0xf),
304            ((tile & 0x0f000000) >> 24) + 0x10,
305            TILE_FLIPXY((code & 0x6000) >> 13));
306   }
307   else
308   {
309      tileinfo->group = 0;
310      SET_TILE_INFO(
311            2,
312            (tile & 0xfffff) + 4*(code & 0xf),
313            (((tile & 0x0ff00000) >> 20)) + 0x100,
314            TILE_FLIPXY((code & 0x6000) >> 13));
235      *pix |= (((((tile & 0x0ff00000) >> 20)) + 0x100)*0x10);
315236
237      if ((*pix & 0xf) != 0xf)
238         return 1;
239      else
240         return 0;
316241   }
242
243   // shouldn't get here..
244   return 0;
317245}
318246
319247
320INLINE void metro_vram_w(offs_t offset,UINT16 data,UINT16 mem_mask,int layer,UINT16 *vram)
248INLINE void metro_vram_w( running_machine *machine, offs_t offset, UINT16 data, UINT16 mem_mask, int layer, UINT16 *vram )
321249{
322250   COMBINE_DATA(&vram[offset]);
323   {
324      /* Account for the window */
325      int col      =   (offset % BIG_NX) - ((metro_window[layer * 2 + 1] / 8) % BIG_NX);
326      int row      =   (offset / BIG_NX) - ((metro_window[layer * 2 + 0] / 8) % BIG_NY);
327      if (col < -(BIG_NX-WIN_NX))   col += (BIG_NX-WIN_NX) + WIN_NX;
328      if (row < -(BIG_NY-WIN_NY))   row += (BIG_NY-WIN_NY) + WIN_NY;
329      if   ( (col >= 0) && (col < WIN_NX) &&
330           (row >= 0) && (row < WIN_NY) )
331      {
332         tilemap_mark_tile_dirty(bg_tilemap[layer], row * WIN_NX + col );
333         if (tilemap_16x16[layer])
334            tilemap_mark_tile_dirty(tilemap_16x16[layer], row * WIN_NX + col );
335      }
336   }
337251}
338252
253WRITE16_HANDLER( metro_vram_0_w ) { metro_state *state = (metro_state *)space->machine->driver_data;  metro_vram_w(space->machine, offset, data, mem_mask, 0, state->vram_0); }
254WRITE16_HANDLER( metro_vram_1_w ) { metro_state *state = (metro_state *)space->machine->driver_data;  metro_vram_w(space->machine, offset, data, mem_mask, 1, state->vram_1); }
255WRITE16_HANDLER( metro_vram_2_w ) { metro_state *state = (metro_state *)space->machine->driver_data;  metro_vram_w(space->machine, offset, data, mem_mask, 2, state->vram_2); }
339256
340257
341static TILE_GET_INFO( get_tile_info_0 ) { get_tile_info(machine,tileinfo,tile_index,0,metro_vram_0); }
342static TILE_GET_INFO( get_tile_info_1 ) { get_tile_info(machine,tileinfo,tile_index,1,metro_vram_1); }
343static TILE_GET_INFO( get_tile_info_2 ) { get_tile_info(machine,tileinfo,tile_index,2,metro_vram_2); }
344258
345static TILE_GET_INFO( get_tile_info_0_8bit ) { get_tile_info_8bit(machine,tileinfo,tile_index,0,metro_vram_0); }
346static TILE_GET_INFO( get_tile_info_1_8bit ) { get_tile_info_8bit(machine,tileinfo,tile_index,1,metro_vram_1); }
347static TILE_GET_INFO( get_tile_info_2_8bit ) { get_tile_info_8bit(machine,tileinfo,tile_index,2,metro_vram_2); }
348
349static TILE_GET_INFO( get_tile_info_0_16x16_8bit ) { get_tile_info_16x16_8bit(machine,tileinfo,tile_index,0,metro_vram_0); }
350static TILE_GET_INFO( get_tile_info_1_16x16_8bit ) { get_tile_info_16x16_8bit(machine,tileinfo,tile_index,1,metro_vram_1); }
351static TILE_GET_INFO( get_tile_info_2_16x16_8bit ) { get_tile_info_16x16_8bit(machine,tileinfo,tile_index,2,metro_vram_2); }
352
353WRITE16_HANDLER( metro_vram_0_w ) { metro_vram_w(offset,data,mem_mask,0,metro_vram_0); }
354WRITE16_HANDLER( metro_vram_1_w ) { metro_vram_w(offset,data,mem_mask,1,metro_vram_1); }
355WRITE16_HANDLER( metro_vram_2_w ) { metro_vram_w(offset,data,mem_mask,2,metro_vram_2); }
356
357
358
359259/* Dirty the relevant tilemap when its window changes */
360260WRITE16_HANDLER( metro_window_w )
361261{
362   UINT16 olddata = metro_window[offset];
363   UINT16 newdata = COMBINE_DATA( &metro_window[offset] );
364   if ( newdata != olddata )
365   {
366      offset /= 2;
367      tilemap_mark_all_tiles_dirty(bg_tilemap[offset]);
368      if (tilemap_16x16[offset]) tilemap_mark_all_tiles_dirty(tilemap_16x16[offset]);
369   }
262   metro_state *state = (metro_state *)space->machine->driver_data;
263   COMBINE_DATA(&state->window[offset]);
264
370265}
371266
372267
r7640r7641
387282 the tile's sizes to be known at startup - which we don't!
388283*/
389284
390static int metro_sprite_xoffs, metro_sprite_yoffs;
285/* Dirty tilemaps when the tiles set changes */
391286
392
393static void alloc_empty_tiles(running_machine *machine)
394{
395   int code,i;
396
397   empty_tiles = auto_alloc_array(machine, UINT8, 16*16*16);
398
399   for (code = 0;code < 0x10;code++)
400      for (i = 0;i < 16*16;i++)
401         empty_tiles[16*16*code + i] = code;
402}
403
404287VIDEO_START( metro_14100 )
405288{
406   support_8bpp = 0;
407   support_16x16 = 0;
408   has_zoom = 0;
289   metro_state *state = (metro_state *)machine->driver_data;
409290
410   alloc_empty_tiles(machine);
411   metro_tiletable_old = auto_alloc_array(machine, UINT16, metro_tiletable_size/2);
412   dirtyindex = auto_alloc_array(machine, UINT8, metro_tiletable_size/4);
291   state->support_8bpp = 0;
292   state->support_16x16 = 0;
293   state->has_zoom = 0;
413294
414   bg_tilemap[0] = tilemap_create(machine, get_tile_info_0,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
415   bg_tilemap[1] = tilemap_create(machine, get_tile_info_1,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
416   bg_tilemap[2] = tilemap_create(machine, get_tile_info_2,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
295   state->bg_tilemap_enable[0] = 1;
296   state->bg_tilemap_enable[1] = 1;
297   state->bg_tilemap_enable[2] = 1;
417298
418   tilemap_16x16[0] = NULL;
419   tilemap_16x16[1] = NULL;
420   tilemap_16x16[2] = NULL;
299   state->bg_tilemap_enable16[0] = 0;
300   state->bg_tilemap_enable16[1] = 0;
301   state->bg_tilemap_enable16[2] = 0;
421302
422   tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
423   tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
424
425   tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
426   tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
427
428   tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
429   tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
430
303   state->bg_tilemap_scrolldx[0] = 0;
304   state->bg_tilemap_scrolldx[1] = 0;
305   state->bg_tilemap_scrolldx[2] = 0;
431306}
432307
433308VIDEO_START( metro_14220 )
434309{
435   support_8bpp = 1;
436   support_16x16 = 0;
437   has_zoom = 0;
310   metro_state *state = (metro_state *)machine->driver_data;
438311
439   alloc_empty_tiles(machine);
440   metro_tiletable_old = auto_alloc_array(machine, UINT16, metro_tiletable_size/2);
441   dirtyindex = auto_alloc_array(machine, UINT8, metro_tiletable_size/4);
312   state->support_8bpp = 1;
313   state->support_16x16 = 0;
314   state->has_zoom = 0;
442315
443   bg_tilemap[0] = tilemap_create(machine, get_tile_info_0_8bit,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
444   bg_tilemap[1] = tilemap_create(machine, get_tile_info_1_8bit,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
445   bg_tilemap[2] = tilemap_create(machine, get_tile_info_2_8bit,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
316   state->bg_tilemap_enable[0] = 1;
317   state->bg_tilemap_enable[1] = 1;
318   state->bg_tilemap_enable[2] = 1;
446319
447   tilemap_16x16[0] = NULL;
448   tilemap_16x16[1] = NULL;
449   tilemap_16x16[2] = NULL;
320   state->bg_tilemap_enable16[0] = 0;
321   state->bg_tilemap_enable16[1] = 0;
322   state->bg_tilemap_enable16[2] = 0;
450323
451   tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
452   tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
453
454   tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
455   tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
456
457   tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
458   tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
459
460   tilemap_set_scrolldx(bg_tilemap[0], -2, 2);
461   tilemap_set_scrolldx(bg_tilemap[1], -2, 2);
462   tilemap_set_scrolldx(bg_tilemap[2], -2, 2);
324   state->bg_tilemap_scrolldx[0] = -2;
325   state->bg_tilemap_scrolldx[1] = -2;
326   state->bg_tilemap_scrolldx[2] = -2;
463327}
464328
465329VIDEO_START( metro_14300 )
466330{
467   support_8bpp = 1;
468   support_16x16 = 1;
469   has_zoom = 0;
331   metro_state *state = (metro_state *)machine->driver_data;
470332
471   alloc_empty_tiles(machine);
472   metro_tiletable_old = auto_alloc_array(machine, UINT16, metro_tiletable_size/2);
473   dirtyindex = auto_alloc_array(machine, UINT8, metro_tiletable_size/4);
333   state->support_8bpp = 1;
334   state->support_16x16 = 1;
335   state->has_zoom = 0;
474336
475   bg_tilemap[0] = tilemap_create(machine, get_tile_info_0_8bit,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
476   bg_tilemap[1] = tilemap_create(machine, get_tile_info_1_8bit,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
477   bg_tilemap[2] = tilemap_create(machine, get_tile_info_2_8bit,tilemap_scan_rows,8,8,WIN_NX,WIN_NY);
337   state->bg_tilemap_enable[0] = 1;
338   state->bg_tilemap_enable[1] = 1;
339   state->bg_tilemap_enable[2] = 1;
478340
479   tilemap_16x16[0] = tilemap_create(machine, get_tile_info_0_16x16_8bit,tilemap_scan_rows,16,16,WIN_NX,WIN_NY);
480   tilemap_16x16[1] = tilemap_create(machine, get_tile_info_1_16x16_8bit,tilemap_scan_rows,16,16,WIN_NX,WIN_NY);
481   tilemap_16x16[2] = tilemap_create(machine, get_tile_info_2_16x16_8bit,tilemap_scan_rows,16,16,WIN_NX,WIN_NY);
341   state->bg_tilemap_enable16[0] = 0;
342   state->bg_tilemap_enable16[1] = 0;
343   state->bg_tilemap_enable16[2] = 0;
482344
483   tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
484   tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
485
486   tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
487   tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
488
489   tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
490   tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
491
492
493   tilemap_map_pen_to_layer(tilemap_16x16[0], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
494   tilemap_map_pen_to_layer(tilemap_16x16[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
495
496   tilemap_map_pen_to_layer(tilemap_16x16[1], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
497   tilemap_map_pen_to_layer(tilemap_16x16[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
498
499   tilemap_map_pen_to_layer(tilemap_16x16[2], 0, 15,  TILEMAP_PIXEL_TRANSPARENT);
500   tilemap_map_pen_to_layer(tilemap_16x16[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
501
345   state->bg_tilemap_scrolldx[0] = 0;
346   state->bg_tilemap_scrolldx[1] = 0;
347   state->bg_tilemap_scrolldx[2] = 0;
502348}
503349
504350VIDEO_START( blzntrnd )
505351{
352   metro_state *state = (metro_state *)machine->driver_data;
353
506354   VIDEO_START_CALL(metro_14220);
507355
508   has_zoom = 1;
356   state->has_zoom = 1;
509357
510   metro_K053936_tilemap = tilemap_create(machine, metro_K053936_get_tile_info, tilemap_scan_rows, 8,8, 256, 512 );
358   state->k053936_tilemap = tilemap_create(machine, metro_k053936_get_tile_info, tilemap_scan_rows, 8, 8, 256, 512);
511359
512   tilemap_set_scrolldx(bg_tilemap[0], 8, -8);
513   tilemap_set_scrolldx(bg_tilemap[1], 8, -8);
514   tilemap_set_scrolldx(bg_tilemap[2], 8, -8);
360   state->bg_tilemap_scrolldx[0] = 8;
361   state->bg_tilemap_scrolldx[1] = 8;
362   state->bg_tilemap_scrolldx[2] = 8;
515363}
516364
517365VIDEO_START( gstrik2 )
518366{
367   metro_state *state = (metro_state *)machine->driver_data;
368
519369   VIDEO_START_CALL(metro_14220);
520370
521   has_zoom = 1;
371   state->has_zoom = 1;
522372
523   metro_K053936_tilemap = tilemap_create(machine, metro_K053936_gstrik2_get_tile_info, tilemap_scan_gstrik2, 16,16, 128, 256 );
373   state->k053936_tilemap = tilemap_create(machine, metro_k053936_gstrik2_get_tile_info, tilemap_scan_gstrik2, 16, 16, 128, 256);
524374
525   tilemap_set_scrolldx(bg_tilemap[0], 8, -8);
526   tilemap_set_scrolldx(bg_tilemap[1], 0, 0);
527   tilemap_set_scrolldx(bg_tilemap[2], 8, -8);
375   state->bg_tilemap_scrolldx[0] = 8;
376   state->bg_tilemap_scrolldx[1] = 0;
377   state->bg_tilemap_scrolldx[2] = 8;
528378}
529379
530380/***************************************************************************
r7640r7641
589439
590440/* Draw sprites */
591441
592void metro_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
442void metro_draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
593443{
594   UINT8 *base_gfx   =   memory_region(machine, "gfx1");
595   UINT8 *gfx_max   =   base_gfx + memory_region_length(machine, "gfx1");
444   metro_state *state = (metro_state *)machine->driver_data;
445   UINT8 *base_gfx = memory_region(machine, "gfx1");
446   UINT8 *gfx_max  = base_gfx + memory_region_length(machine, "gfx1");
596447
597448   int max_x = video_screen_get_width(machine->primary_screen);
598449   int max_y = video_screen_get_height(machine->primary_screen);
599450
600   int max_sprites         =   machine->generic.spriteram_size / 8;
601   int sprites            =   metro_videoregs[0x00/2] % max_sprites;
451   int max_sprites = state->spriteram_size / 8;
452   int sprites     = state->videoregs[0x00/2] % max_sprites;
602453
603   int color_start         =   ((metro_videoregs[0x08/2] & 0xf) << 4 ) + 0x100;
454   int color_start = ((state->videoregs[0x08/2] & 0x0f) << 4) + 0x100;
604455
605456   int i, j, pri;
606   static const int primask[4] = { 0x0000, 0xff00, 0xff00|0xf0f0, 0xff00|0xf0f0|0xcccc };
457   static const int primask[4] = { 0x0000, 0xff00, 0xff00 | 0xf0f0, 0xff00 | 0xf0f0 | 0xcccc };
607458
608459   UINT16 *src;
609460   int inc;
r7640r7641
611462   if (sprites == 0)
612463      return;
613464
614   for (i=0; i<0x20; i++)
465   for (i = 0; i < 0x20; i++)
615466   {
616467      gfx_element gfx;
617468
618      if (!(metro_videoregs[0x02/2] & 0x8000))
469      if (!(state->videoregs[0x02/2] & 0x8000))
619470      {
620         src = machine->generic.spriteram.u16 + (sprites - 1) * (8/2);
621         inc = -(8/2);
471         src = state->spriteram + (sprites - 1) * (8 / 2);
472         inc = -(8 / 2);
622473      } else {
623         src = machine->generic.spriteram.u16;
624         inc = (8/2);
474         src = state->spriteram;
475         inc = (8 / 2);
625476      }
626477
627      for (j=0; j<sprites; j++)
478      for (j = 0; j < sprites; j++)
628479      {
629         int x,y, attr,code,color,flipx,flipy, zoom, curr_pri,width,height;
480         int x, y, attr, code, color, flipx, flipy, zoom, curr_pri, width, height;
630481         UINT8 *gfxdata;
631482
632483         /* Exponential zoom table extracted from daitoride */
r7640r7641
640491            0x0A0,0x09C,0x098,0x094,0x090,0x08C,0x088,0x080,
641492            0x078,0x070,0x068,0x060,0x058,0x050,0x048,0x040   };
642493
643         x               =   src[ 0 ];
644         curr_pri         =   (x & 0xf800) >> 11;
494         x = src[0];
495         curr_pri = (x & 0xf800) >> 11;
645496
646497         if ((curr_pri == 0x1f) || (curr_pri != i))
647498         {
r7640r7641
649500            continue;
650501         }
651502
652         pri = (metro_videoregs[0x02/2] & 0x0300) >> 8;
503         pri = (state->videoregs[0x02/2] & 0x0300) >> 8;
653504
654         if (!(metro_videoregs[0x02/2] & 0x8000))
505         if (!(state->videoregs[0x02/2] & 0x8000))
655506         {
656            if (curr_pri > (metro_videoregs[0x02/2] & 0x1f))
657               pri = (metro_videoregs[0x02/2] & 0x0c00) >> 10;
507            if (curr_pri > (state->videoregs[0x02/2] & 0x1f))
508               pri = (state->videoregs[0x02/2] & 0x0c00) >> 10;
658509         }
659510
660         y               =   src[ 1 ];
661         attr            =   src[ 2 ];
662         code            =   src[ 3 ];
511         y     = src[1];
512         attr  = src[2];
513         code  = src[3];
663514
664         flipx            =   attr & 0x8000;
665         flipy            =   attr & 0x4000;
666         color            =   (attr & 0xf0) >> 4;
515         flipx =  attr & 0x8000;
516         flipy =  attr & 0x4000;
517         color = (attr & 0xf0) >> 4;
667518
668         zoom            =   zoomtable[(y & 0xfc00) >> 10] << (16-8);
519         zoom = zoomtable[(y & 0xfc00) >> 10] << (16 - 8);
669520
670         x               =   (x & 0x07ff) - metro_sprite_xoffs;
671         y               =   (y & 0x03ff) - metro_sprite_yoffs;
521         x = (x & 0x07ff) - state->sprite_xoffs;
522         y = (y & 0x03ff) - state->sprite_yoffs;
672523
673         width            = (( (attr >> 11) & 0x7 ) + 1 ) * 8;
674         height            = (( (attr >>  8) & 0x7 ) + 1 ) * 8;
524         width  = (((attr >> 11) & 0x7) + 1) * 8;
525         height = (((attr >>  8) & 0x7) + 1) * 8;
675526
676         gfxdata      =   base_gfx + (8*8*4/8) * (((attr & 0x000f) << 16) + code);
527         gfxdata = base_gfx + (8 * 8 * 4 / 8) * (((attr & 0x000f) << 16) + code);
677528
678         if (flip_screen_get(machine))
529         if (state->flip_screen)
679530         {
680531            flipx = !flipx;      x = max_x - x - width;
681532            flipy = !flipy;      y = max_y - y - height;
682533         }
683534
684         if (support_8bpp && color == 0xf)   /* 8bpp */
535         if (state->support_8bpp && color == 0xf)   /* 8bpp */
685536         {
686537            /* Bounds checking */
687            if ( (gfxdata + width * height - 1) >= gfx_max )
538            if ((gfxdata + width * height - 1) >= gfx_max)
688539               continue;
689540
690541            gfx_element_build_temporary(&gfx, machine, gfxdata, width, height, width, 0, 256, 0);
r7640r7641
700551         else
701552         {
702553            /* Bounds checking */
703            if ( (gfxdata + width/2 * height - 1) >= gfx_max )
554            if ((gfxdata + width / 2 * height - 1) >= gfx_max)
704555               continue;
705556
706557            gfx_element_build_temporary(&gfx, machine, gfxdata, width, height, width/2, 0, 16, GFX_ELEMENT_PACKED);
r7640r7641
716567#if 0
717568{   /* Display priority + zoom on each sprite */
718569   char buf[80];
719   sprintf(buf, "%02X %02X",((src[ 0 ] & 0xf800) >> 11)^0x1f,((src[ 1 ] & 0xfc00) >> 10) );
570   sprintf(buf, "%02X %02X", ((src[0] & 0xf800) >> 11) ^ 0x1f, ((src[1] & 0xfc00) >> 10));
720571   ui_draw_text(buf, x, y);
721572}
722573#endif
r7640r7641
735586
736587***************************************************************************/
737588
738static void draw_tilemap(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, tilemap_t *tmap, UINT32 flags, UINT32 priority,
739                   int sx, int sy, int wx, int wy)   // scroll & window values
589/* copy a 'window' from the large 2048x2048 (or 4096x4096 for 16x16 tiles) tilemap */
590
591
592static void draw_tilemap( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, UINT32 flags, UINT32 pcode,
593                   int sx, int sy, int wx, int wy, int big, UINT16* tilemapram, int layer )
740594{
741#if 1
742      tilemap_set_scrollx(tmap, 0, sx - wx + (wx & 7));
743      tilemap_set_scrolly(tmap, 0, sy - wy + (wy & 7));
744      tilemap_draw(bitmap,cliprect,tmap, flags, priority);
745#else
746   int x,y,i;
747   const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
595   metro_state *state = (metro_state *)machine->driver_data;
596   int y;
748597
749   /* sub tile placement */
750//  sx      =   sx - (wx & ~7) + (wx & 7);
751   sx      =   sx - wx;
752   sx      =   ( (sx & 0x7fff) - (sx & 0x8000) ) % ((WIN_NX-1)*8);
598   bitmap_t *priority_bitmap = machine->priority_bitmap;
753599
754//  sy      =   sy - (wy & ~7) + (wy & 7);
755   sy      =   sy - wy;
756   sy      =   ( (sy & 0x7fff) - (sy & 0x8000) ) % ((WIN_NY-1)*8);
600   int width = big ? 4096 : 2048;//pixdata->width;
601   int height = big ? 4096 : 2048;//pixdata->height;
757602
758   /* splitting point */
759   x      =   (WIN_NX-1)*8 - sx;
603   int scrwidth = bitmap->width;
604   int scrheight = bitmap->height;
760605
761   y      =   (WIN_NY-1)*8 - sy;
606   int windowwidth = width >> 2;
607   int windowheight = height >> 3;
762608
763   for ( i = 0; i < 4 ; i++ )
609   if (!big)
764610   {
765      rectangle clip;
611      if (!state->bg_tilemap_enable[layer]) return;
612   }
613   else
614   {
615      if (!state->bg_tilemap_enable16[layer]) return;
616   }
766617
767      tilemap_set_scrollx(tmap, 0, sx + ((i & 1) ? -x : 0));
768      tilemap_set_scrolly(tmap, 0, sy + ((i & 2) ? -y : 0));
769618
770      clip.min_x   =   x - ((i & 1) ? 0 : (WIN_NX-1)*8);
771      clip.min_y   =   y - ((i & 2) ? 0 : (WIN_NY-1)*8);
619   if (!state->flip_screen)
620   {
621      sx -= state->bg_tilemap_scrolldx[layer];
622   }
623   else
624   {
625      sx += state->bg_tilemap_scrolldx[layer];
626   }
772627
773      clip.max_x   =   clip.min_x + (WIN_NX-1)*8 - 1;
774      clip.max_y   =   clip.min_y + (WIN_NY-1)*8 - 1;
628   for (y=0;y<scrheight;y++)
629   {
630      int scrolly = (sy+y-wy)&(windowheight-1);
631      int x;
632      UINT16* dst;
633      UINT8 *priority_baseaddr;
634      int srcline = (wy+scrolly)&(height-1);
635      int srctilerow = srcline >> (big ? 4 : 3);
775636
776      if (clip.min_x > visarea->max_x)   continue;
777      if (clip.min_y > visarea->max_y)   continue;
637      if (!state->flip_screen)
638      {
639         dst = BITMAP_ADDR16(bitmap, y, 0);
640         priority_baseaddr = BITMAP_ADDR8(priority_bitmap, y, 0);
778641
779      if (clip.max_x < visarea->min_x)   continue;
780      if (clip.max_y < visarea->min_y)   continue;
642         for (x=0;x<scrwidth;x++)
643         {
644            int scrollx = (sx+x-wx)&(windowwidth-1);
645            int srccol = (wx+scrollx)&(width-1);
646            int srctilecol = srccol >> (big ? 4 : 3);
647            int tileoffs = srctilecol + srctilerow * BIG_NX;
781648
782      if (clip.min_x < visarea->min_x)   clip.min_x = visarea->min_x;
783      if (clip.max_x > visarea->max_x)   clip.max_x = visarea->max_x;
649            UINT16 dat = 0;
784650
785      if (clip.min_y < visarea->min_y)   clip.min_y = visarea->min_y;
786      if (clip.max_y > visarea->max_y)   clip.max_y = visarea->max_y;
651            UINT16 tile = tilemapram[tileoffs];
652            UINT8 draw = get_tile_pix(machine, tile, big ? (srccol&0xf) : (srccol&0x7), big ? (srcline&0xf) : (srcline&0x7), big, &dat);
787653
788      /* The clip region's width must be a multiple of 8!
789           This fact renderes the function useless, as far as
790           we are concerned! */
791      tilemap_set_clip(tmap, &clip);
792      tilemap_draw(bitmap,cliprect,tmap, flags, priority);
654            if (draw)
655            {
656               dst[x] = dat;
657               priority_baseaddr[x] = (priority_baseaddr[x] & (pcode >> 8)) | pcode;
658            }
659         }
660      }
661      else // flipped case
662      {
663         dst = BITMAP_ADDR16(bitmap, scrheight-y-1, 0);
664         priority_baseaddr = BITMAP_ADDR8(priority_bitmap, scrheight-y-1, 0);
665
666         for (x=0;x<scrwidth;x++)
667         {
668            int scrollx = (sx+x-wx)&(windowwidth-1);
669            int srccol = (wx+scrollx)&(width-1);
670            int srctilecol = srccol >> (big ? 4 : 3);
671            int tileoffs = srctilecol + srctilerow * BIG_NX;
672
673            UINT16 dat = 0;
674
675            UINT16 tile = tilemapram[tileoffs];
676            UINT8 draw = get_tile_pix(machine, tile, big ? (srccol&0xf) : (srccol&0x7), big ? (srcline&0xf) : (srcline&0x7), big, &dat);
677
678            if (draw)
679            {
680               dst[scrwidth-x-1] = dat;
681               priority_baseaddr[scrwidth-x-1] = (priority_baseaddr[scrwidth-x-1] & (pcode >> 8)) | pcode;
682            }
683         }
684      }
793685   }
794#endif
795686}
796687
797
798688/* Draw all the layers that match the given priority */
799static void draw_layers(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int pri, int layers_ctrl)
689static void draw_layers( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int pri, int layers_ctrl )
800690{
801   UINT16 layers_pri = metro_videoregs[0x10/2];
691   metro_state *state = (metro_state *)machine->driver_data;
692   UINT16 layers_pri = state->videoregs[0x10 / 2];
802693   int layer;
803694
804695   /* Draw all the layers with priority == pri */
805696   for (layer = 2; layer >= 0; layer--)   // tilemap[2] below?
806697   {
807      if ( pri == ((layers_pri >> (layer*2)) & 3) )
698      if (pri == ((layers_pri >> (layer * 2)) & 3))
808699      {
809700         /* Scroll and Window values */
810         UINT16 sy = metro_scroll[layer * 2 + 0];   UINT16 sx = metro_scroll[layer * 2 + 1];
811         UINT16 wy = metro_window[layer * 2 + 0];   UINT16 wx = metro_window[layer * 2 + 1];
701         UINT16 sy = state->scroll[layer * 2 + 0];   UINT16 sx = state->scroll[layer * 2 + 1];
702         UINT16 wy = state->window[layer * 2 + 0];   UINT16 wx = state->window[layer * 2 + 1];
812703
813         if (layers_ctrl & (1<<layer))   // for debug
704         if (BIT(layers_ctrl, layer))   // for debug
814705         {
815            /* Only *one* of tilemap_16x16 & tilemap is enabled at any given time! */
816            draw_tilemap(machine, bitmap,cliprect,bg_tilemap[layer], 0, 1<<(3-pri), sx, sy, wx, wy);
817            if (tilemap_16x16[layer]) draw_tilemap(machine, bitmap,cliprect,tilemap_16x16[layer], 0, 1<<(3-pri), sx, sy, wx, wy);
818         }
819      }
820   }
821}
706            UINT16* tilemapram = 0;
822707
708            if (layer==0) tilemapram = state->vram_0;
709            else if (layer==1) tilemapram = state->vram_1;
710            else if (layer==2) tilemapram = state->vram_2;
823711
712            draw_tilemap(machine, bitmap, cliprect, 0, 1 << (3 - pri), sx, sy, wx, wy, 0, tilemapram, layer);
824713
825/* Dirty tilemaps when the tiles set changes */
826static void dirty_tiles(int layer,UINT16 *vram)
827{
828   int col,row;
829
830   for (row = 0;row < WIN_NY;row++)
831   {
832      for (col = 0;col < WIN_NX;col++)
833      {
834         int offset = (col + metro_window[layer * 2 + 1] / 8) % BIG_NX +
835                  ((row + metro_window[layer * 2 + 0] / 8) % BIG_NY) * BIG_NX;
836         UINT16 code = vram[offset];
837
838         if (!(code & 0x8000) && dirtyindex[(code & 0x1ff0) >> 4])
839         {
840            tilemap_mark_tile_dirty(bg_tilemap[layer], row * WIN_NX + col );
841            if (tilemap_16x16[layer])
842               tilemap_mark_tile_dirty(tilemap_16x16[layer], row * WIN_NX + col );
714            if (state->support_16x16)
715               draw_tilemap(machine, bitmap, cliprect, 0, 1 << (3 - pri), sx, sy, wx, wy, 1, tilemapram, layer);
843716         }
844717      }
845718   }
846719}
847720
848721
722
849723VIDEO_UPDATE( metro )
850724{
851   running_device *k053936 = devtag_get_device(screen->machine, "k053936");
852   int i,pri,layers_ctrl = -1;
853   UINT16 screenctrl = *metro_screenctrl;
725   metro_state *state = (metro_state *)screen->machine->driver_data;
726   int pri, layers_ctrl = -1;
727   UINT16 screenctrl = *state->screenctrl;
854728
855   {
856      int dirty = 0;
729   state->sprite_xoffs = state->videoregs[0x06 / 2] - video_screen_get_width(screen)  / 2;
730   state->sprite_yoffs = state->videoregs[0x04 / 2] - video_screen_get_height(screen) / 2;
857731
858      memset(dirtyindex,0,metro_tiletable_size/4);
859      for (i = 0;i < metro_tiletable_size/4;i++)
860      {
861         UINT32 tile_new = (metro_tiletable[2*i + 0] << 16 ) + metro_tiletable[2*i + 1];
862         UINT32 tile_old = (metro_tiletable_old[2*i + 0] << 16 ) + metro_tiletable_old[2*i + 1];
863
864         if ((tile_new ^ tile_old) & 0x0fffffff)
865         {
866            dirtyindex[i] = 1;
867            dirty = 1;
868         }
869      }
870      memcpy(metro_tiletable_old,metro_tiletable,metro_tiletable_size);
871
872      if (dirty)
873      {
874         dirty_tiles(0,metro_vram_0);
875         dirty_tiles(1,metro_vram_1);
876         dirty_tiles(2,metro_vram_2);
877      }
878   }
879
880   metro_sprite_xoffs   =   metro_videoregs[0x06/2] - video_screen_get_width(screen)  / 2;
881   metro_sprite_yoffs   =   metro_videoregs[0x04/2] - video_screen_get_height(screen) / 2;
882
883732   /* The background color is selected by a register */
884   bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
885   bitmap_fill(bitmap,cliprect,((metro_videoregs[0x12/2] & 0x0fff)) + 0x1000);
733   bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
734   bitmap_fill(bitmap, cliprect, ((state->videoregs[0x12/2] & 0x0fff)) + 0x1000);
886735
887736   /*  Screen Control Register:
888737
r7640r7641
895744        ---- ---- ---4 32--
896745        ---- ---- ---- --1-     ? Blank Screen
897746        ---- ---- ---- ---0     Flip  Screen    */
898   if (screenctrl & 2)   return 0;
899   flip_screen_set(screen->machine, screenctrl & 1);
747   if (screenctrl & 2)
748      return 0;
900749
750   //flip_screen_set(screen->machine, screenctrl & 1);
751   state->flip_screen = screenctrl & 1;
752
901753   /* If the game supports 16x16 tiles, make sure that the
902754       16x16 and 8x8 tilemaps of a given layer are not simultaneously
903755       enabled! */
904   if (support_16x16)
756   if (state->support_16x16)
905757   {
906758      int layer;
907759
908      for (layer = 0;layer < 3;layer++)
760      for (layer = 0; layer < 3; layer++)
909761      {
910762         int big = screenctrl & (0x0020 << layer);
911763
912         tilemap_set_enable(bg_tilemap[layer],!big);
913         tilemap_set_enable(tilemap_16x16[layer],big);
764         state->bg_tilemap_enable[layer] = !big;
765         state->bg_tilemap_enable16[layer] = big;
914766      }
915767   }
916768
r7640r7641
925777   if (input_code_pressed(screen->machine, KEYCODE_A))   msk |= 8;
926778   if (msk != 0)
927779   {
928      bitmap_fill(bitmap,cliprect,0);
780      bitmap_fill(bitmap, cliprect, 0);
929781      layers_ctrl &= msk;
930782   }
931783
932784   popmessage("l %x-%x-%x r %04x %04x %04x",
933            (metro_videoregs[0x10/2]&0x30)>>4,(metro_videoregs[0x10/2]&0xc)>>2,metro_videoregs[0x10/2]&3,
934            metro_videoregs[0x02/2], metro_videoregs[0x12/2],
935            *metro_screenctrl);
785            (state->videoregs[0x10/2] & 0x30) >> 4, (state->videoregs[0x10/2] & 0xc) >> 2, state->videoregs[0x10/2] & 3,
786            state->videoregs[0x02/2], state->videoregs[0x12/2],
787            *state->screenctrl);
936788}
937789#endif
938790
939   if (has_zoom)
940      k053936_zoom_draw(k053936, bitmap, cliprect, metro_K053936_tilemap, 0, 0, 1);
791   if (state->has_zoom)
792      k053936_zoom_draw(state->k053936, bitmap, cliprect, state->k053936_tilemap, 0, 0, 1);
941793
942794   for (pri = 3; pri >= 0; pri--)
943      draw_layers(screen->machine, bitmap,cliprect,pri,layers_ctrl);
795      draw_layers(screen->machine, bitmap, cliprect, pri, layers_ctrl);
944796
945797   if (layers_ctrl & 0x08)
946      metro_draw_sprites(screen->machine, bitmap,cliprect);
798      metro_draw_sprites(screen->machine, bitmap, cliprect);
947799   return 0;
948800}
src/mame/video/pass.c
r7640r7641
88static TILE_GET_INFO( get_pass_bg_tile_info )
99{
1010   pass_state *state = (pass_state *)machine->driver_data;
11   int tileno,fx;
11   int tileno, fx;
1212
1313   tileno = state->bg_videoram[tile_index] & 0x1fff;
1414   fx = (state->bg_videoram[tile_index] & 0xc000) >> 14;
15   SET_TILE_INFO(1,tileno,0,TILE_FLIPYX(fx));
15   SET_TILE_INFO(1, tileno, 0, TILE_FLIPYX(fx));
1616
1717}
1818
r7640r7641
2121   pass_state *state = (pass_state *)space->machine->driver_data;
2222
2323   state->bg_videoram[offset] = data;
24   tilemap_mark_tile_dirty(state->bg_tilemap,offset);
24   tilemap_mark_tile_dirty(state->bg_tilemap, offset);
2525}
2626
2727/* foreground 'sprites' tilemap stuff */
r7640r7641
3434   tileno = state->fg_videoram[tile_index] & 0x3fff;
3535   flip = (state->fg_videoram[tile_index] & 0xc000) >>14;
3636
37   SET_TILE_INFO(0,tileno,0,TILE_FLIPYX(flip));
37   SET_TILE_INFO(0, tileno, 0, TILE_FLIPYX(flip));
3838
3939}
4040
r7640r7641
4242{
4343   pass_state *state = (pass_state *)space->machine->driver_data;
4444   state->fg_videoram[offset] = data;
45   tilemap_mark_tile_dirty(state->fg_tilemap,offset);
45   tilemap_mark_tile_dirty(state->fg_tilemap, offset);
4646}
4747
4848/* video update / start */
4949
50VIDEO_UPDATE( pass )
50VIDEO_START( pass )
5151{
52   pass_state *state = (pass_state *)screen->machine->driver_data;
52   pass_state *state = (pass_state *)machine->driver_data;
5353
54   tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0);
55   tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0);
54   state->bg_tilemap = tilemap_create(machine, get_pass_bg_tile_info, tilemap_scan_rows, 8, 8,  64, 32);
55   state->fg_tilemap = tilemap_create(machine, get_pass_fg_tile_info, tilemap_scan_rows, 4, 4, 128, 64);
5656
57   return 0;
57   tilemap_set_transparent_pen(state->fg_tilemap, 255);
5858}
5959
60VIDEO_START( pass )
60VIDEO_UPDATE( pass )
6161{
62   pass_state *state = (pass_state *)machine->driver_data;
62   pass_state *state = (pass_state *)screen->machine->driver_data;
6363
64   state->bg_tilemap = tilemap_create(machine, get_pass_bg_tile_info,tilemap_scan_rows, 8, 8,64,32);
65   state->fg_tilemap = tilemap_create(machine, get_pass_fg_tile_info,tilemap_scan_rows, 4, 4,128,64);
64   tilemap_draw(bitmap,cliprect,state->bg_tilemap, 0, 0);
65   tilemap_draw(bitmap,cliprect,state->fg_tilemap, 0, 0);
6666
67   tilemap_set_transparent_pen(state->fg_tilemap,255);
67   return 0;
6868}
src/mame/video/pbaction.c
r7640r7641
77***************************************************************************/
88
99#include "emu.h"
10#include "includes/pbaction.h"
1011
11UINT8 *pbaction_videoram, *pbaction_colorram;
12UINT8 *pbaction_videoram2, *pbaction_colorram2;
13
14static int scroll;
15
16static tilemap_t *bg_tilemap, *fg_tilemap;
17
1812WRITE8_HANDLER( pbaction_videoram_w )
1913{
20   pbaction_videoram[offset] = data;
21   tilemap_mark_tile_dirty(bg_tilemap, offset);
14   pbaction_state *state = (pbaction_state *)space->machine->driver_data;
15   state->videoram[offset] = data;
16   tilemap_mark_tile_dirty(state->bg_tilemap, offset);
2217}
2318
2419WRITE8_HANDLER( pbaction_colorram_w )
2520{
26   pbaction_colorram[offset] = data;
27   tilemap_mark_tile_dirty(bg_tilemap, offset);
21   pbaction_state *state = (pbaction_state *)space->machine->driver_data;
22   state->colorram[offset] = data;
23   tilemap_mark_tile_dirty(state->bg_tilemap, offset);
2824}
2925
3026WRITE8_HANDLER( pbaction_videoram2_w )
3127{
32   pbaction_videoram2[offset] = data;
33   tilemap_mark_tile_dirty(fg_tilemap, offset);
28   pbaction_state *state = (pbaction_state *)space->machine->driver_data;
29   state->videoram2[offset] = data;
30   tilemap_mark_tile_dirty(state->fg_tilemap, offset);
3431}
3532
3633WRITE8_HANDLER( pbaction_colorram2_w )
3734{
38   pbaction_colorram2[offset] = data;
39   tilemap_mark_tile_dirty(fg_tilemap, offset);
35   pbaction_state *state = (pbaction_state *)space->machine->driver_data;
36   state->colorram2[offset] = data;
37   tilemap_mark_tile_dirty(state->fg_tilemap, offset);
4038}
4139
4240WRITE8_HANDLER( pbaction_scroll_w )
4341{
44   scroll = data - 3;
45   if (flip_screen_get(space->machine)) scroll = -scroll;
46   tilemap_set_scrollx(bg_tilemap, 0, scroll);
47   tilemap_set_scrollx(fg_tilemap, 0, scroll);
42   pbaction_state *state = (pbaction_state *)space->machine->driver_data;
43   state->scroll = data - 3;
44   if (flip_screen_get(space->machine))
45      state->scroll = -state->scroll;
46
47   tilemap_set_scrollx(state->bg_tilemap, 0, state->scroll);
48   tilemap_set_scrollx(state->fg_tilemap, 0, state->scroll);
4849}
4950
5051WRITE8_HANDLER( pbaction_flipscreen_w )
r7640r7641
5455
5556static TILE_GET_INFO( get_bg_tile_info )
5657{
57   int attr = pbaction_colorram[tile_index];
58   int code = pbaction_videoram[tile_index] + 0x10 * (attr & 0x70);
58   pbaction_state *state = (pbaction_state *)machine->driver_data;
59   int attr = state->colorram[tile_index];
60   int code = state->videoram[tile_index] + 0x10 * (attr & 0x70);
5961   int color = attr & 0x07;
6062   int flags = (attr & 0x80) ? TILE_FLIPY : 0;
6163
r7640r7641
6466
6567static TILE_GET_INFO( get_fg_tile_info )
6668{
67   int attr = pbaction_colorram2[tile_index];
68   int code = pbaction_videoram2[tile_index] + 0x10 * (attr & 0x30);
69   pbaction_state *state = (pbaction_state *)machine->driver_data;
70   int attr = state->colorram2[tile_index];
71   int code = state->videoram2[tile_index] + 0x10 * (attr & 0x30);
6972   int color = attr & 0x0f;
7073   int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0);
7174
r7640r7641
7477
7578VIDEO_START( pbaction )
7679{
77   bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows,
78       8, 8, 32, 32);
80   pbaction_state *state = (pbaction_state *)machine->driver_data;
81   state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
82   state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
7983
80   fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows,
81       8, 8, 32, 32);
82
83   tilemap_set_transparent_pen(fg_tilemap, 0);
84   tilemap_set_transparent_pen(state->fg_tilemap, 0);
8485}
8586
86static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
87static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
8788{
88   UINT8 *spriteram = machine->generic.spriteram.u8;
89   pbaction_state *state = (pbaction_state *)machine->driver_data;
90   UINT8 *spriteram = state->spriteram;
8991   int offs;
9092
91   for (offs = machine->generic.spriteram_size - 4;offs >= 0;offs -= 4)
93   for (offs = state->spriteram_size - 4; offs >= 0; offs -= 4)
9294   {
93      int sx,sy,flipx,flipy;
95      int sx, sy, flipx, flipy;
9496
9597      /* if next sprite is double size, skip this one */
96      if (offs > 0 && spriteram[offs - 4] & 0x80) continue;
98      if (offs > 0 && spriteram[offs - 4] & 0x80)
99         continue;
97100
98      sx = spriteram[offs+3];
101      sx = spriteram[offs + 3];
102
99103      if (spriteram[offs] & 0x80)
100         sy = 225-spriteram[offs+2];
104         sy = 225 - spriteram[offs + 2];
101105      else
102         sy = 241-spriteram[offs+2];
103      flipx = spriteram[offs+1] & 0x40;
104      flipy =   spriteram[offs+1] & 0x80;
106         sy = 241 - spriteram[offs + 2];
107
108      flipx = spriteram[offs + 1] & 0x40;
109      flipy = spriteram[offs + 1] & 0x80;
110
105111      if (flip_screen_get(machine))
106112      {
107113         if (spriteram[offs] & 0x80)
r7640r7641
122128            spriteram[offs],
123129            spriteram[offs + 1] & 0x0f,
124130            flipx,flipy,
125            sx + (flip_screen_get(machine) ? scroll : -scroll), sy,0);
131            sx + (flip_screen_get(machine) ? state->scroll : -state->scroll), sy,0);
126132   }
127133}
128134
129135VIDEO_UPDATE( pbaction )
130136{
131   tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
137   pbaction_state *state = (pbaction_state *)screen->machine->driver_data;
138
139   tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
132140   draw_sprites(screen->machine, bitmap, cliprect);
133   tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
141   tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
134142   return 0;
135143}
src/mame/video/funworld.c
r7640r7641
1111
1212  * Jolly Card (austrian),                            TAB-Austria,        1985.
1313  * Jolly Card (3x3 deal),                            TAB-Austria,        1985.
14  * Jolly Card Professional 2.0,                      Spale-Soft,         2000.
14  * Jolly Card Professional 2.0 (MZS Tech),           MZS Tech,           1993.
15  * Jolly Card Professional 2.0 (Spale Soft),         Spale Soft,         2000.
1516  * Jolly Card (Evona Electronic),                    Evona Electronic    1998.
1617  * Jolly Card (croatian, set 1),                     TAB-Austria,        1985.
1718  * Jolly Card (croatian, set 2),                     Soft Design,        1993.
r7640r7641
4546  * Royal Vegas Joker Card (slow deal),               Funworld,           1993.
4647  * Royal Vegas Joker Card (fast deal),               Soft Design,        1993.
4748  * Royal Vegas Joker Card (fast deal, english gfx),  Soft Design,        1993.
49  * Royal Vegas Joker Card (fast deal, Mile),         Mile,               1993.
4850  * Jolly Joker (98bet, set 1).                       Impera,             198?.
4951  * Jolly Joker (98bet, set 2).                       Impera,             198?.
5052  * Jolly Joker (40bet, croatian hack),               Impera,             198?.
53  * Multi Win (Ver.0167, encrypted),                  Funworld,           1992.
5154  * Joker Card (Ver.A267BC, encrypted),               Vesely Svet,        1993.
5255  * Mongolfier New (italian),                         bootleg,            199?.
5356  * Soccer New (italian),                             bootleg,            199?.
5457  * Saloon (french, encrypted),                       unknown,            199?.
58  * Fun World Quiz (austrian),                        Funworld,           198?.
5559
5660
5761***********************************************************************************/
src/mame/video/psikyosh.c
r7640r7641
487487   psikyosh_state *state = (psikyosh_state *)machine->driver_data;
488488   int i;
489489
490#ifdef DEBUG_KEYS
490491   const int lay_keys[8] = {KEYCODE_Q, KEYCODE_W, KEYCODE_E, KEYCODE_R};
491492   bool lay_debug = false;
492493   for (i = 0; i <= 3; i++)
r7640r7641
495496         lay_debug = true;
496497      }
497498   }
499#endif
498500
499501   /* 1st-4th layers */
500502   for (i = 0; i <= 3; i++)
501503   {
502504#ifdef DEBUG_KEYS
503      if(lay_debug && !input_code_pressed(machine, lay_keys[i])) {
505      if(lay_debug && !input_code_pressed(machine, lay_keys[i]))
504506         continue;
505      }
506507#endif
507508
508509      if (!BG_LAYER_ENABLE(i))
src/mame/video/konicdev.c
r7640r7641
97949794         while ((k001005->_3d_fifo[index] & 0xffffff00) != 0x80000000 && index < k001005->_3d_fifo_ptr)
97959795         {
97969796            poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(k001005->poly);
9797#if POLY_DEVICE
97979798            int new_verts = 0;
9798
9799#endif
97999800            if (poly_type)
98009801            {
98019802               memcpy(&v[0], &k001005->prev_v[2], sizeof(poly_vertex));
r7640r7641
98489849               v[j].p[1] = u2 * v[j].p[3];
98499850               v[j].p[2] = v2 * v[j].p[3];
98509851
9852#if POLY_DEVICE
98519853               ++new_verts;
9854#endif
98529855
98539856               if (end)
98549857                  break;
src/mame/video/konamigx.c
r7640r7641
3939static int gx_tilemode, gx_rozenable, psac_colorbase, last_psac_colorbase;
4040static int gx_specialrozenable; // type 1 roz, with voxel height-map, rendered from 2 source tilemaps (which include height data) to temp bitmap for further processing
4141static int gx_rushingheroes_hack;
42static int gx_le2_textcolour_hack;
4243static tilemap_t *gx_psac_tilemap, *gx_psac_tilemap2;
4344extern UINT32 *gx_psacram, *gx_subpaletteram32;
4445static bitmap_t* type3_roz_temp_bitmap;
r7640r7641
10061007   emx   |=  vmx;
10071008   pal   |=  vcb;
10081009
1010   if (gx_le2_textcolour_hack)
1011      if (layer==0)
1012         pal |= 0x1c0;
1013
10091014   if (von == 3) emx = -1; // invalidate external mix code if all bits are from internal
10101015   *color =  pal;
10111016
r7640r7641
11891194   if (!disp) return;
11901195   cltc_shdpri = K054338_read_register(K338_REG_CONTROL);
11911196
1197
11921198   if (!rushingheroes_hack) // Slam Dunk 2 never sets this.  It's either part of the protection, or type4 doesn't use it
11931199   {
11941200      if (!(cltc_shdpri & K338_CTL_KILL)) return;
11951201   }
11961202
1203
11971204   // demote shadows by one layer when this bit is set??? (see p.73 8.6)
11981205   cltc_shdpri &= K338_CTL_SHDPRI;
11991206
r7640r7641
20252032   gx_rozenable = 0;
20262033   gx_specialrozenable = 0;
20272034   gx_rushingheroes_hack = 0;
2035   gx_le2_textcolour_hack = 0;
20282036
20292037   // Documented relative offsets of non-flipped games are (-2, 0, 2, 3),(0, 0, 0, 0).
20302038   // (+ve values move layers to the right and -ve values move layers to the left)
r7640r7641
21202128   _gxcommoninitnosprites(machine);
21212129
21222130   konamigx_mixer_primode(-1); // swapped layer B and C priorities?
2131
2132   gx_le2_textcolour_hack = 1; // force text layer to use the right palette
2133   K055555_write_reg(K55_INPUT_ENABLES, 1); // it doesn't turn on the video output at first for the test screens, maybe it should default to ON?
21232134}
21242135
21252136VIDEO_START(konamigx_6bpp)
src/mame/video/n64.c
r7640r7641
412412   #include "video/rdpcc.c"
413413
414414#define CACHE_TEXTURE_PARAMS(TEX) \
415   TEXTURE_PIPELINE = rdp_texture_pipeline_func[(TEX->shift_t ? 64 : 0) | (TEX->shift_s ? 32 : 0) | ((TEX->ct || !TEX->mask_t) ? 16 : 0) | ((TEX->cs || !TEX->mask_s) ? 8 : 0) | ((other_modes.cycle_type == CYCLE_TYPE_COPY) ? 4 : 0) | (other_modes.mid_texel << 1) | other_modes.sample_type]; \
415   TEXTURE_PIPELINE = rdp_texture_pipeline_func[(TEX->shift_t ? 64 : 0) | (TEX->shift_s ? 32 : 0) | ((TEX->ct || !TEX->mask_t) ? 16 : 0) | ((TEX->cs || !TEX->mask_s) ? 8 : 0) | ((other_modes.cycle_type == CYCLE_TYPE_COPY) ? 4 : 0) | (other_modes.mid_texel << 1) | (other_modes.sample_type ? 1 : 0)]; \
416416   MASK = rdp_mask_func[(TEX->mask_s ? 2 : 0) | (TEX->mask_t ? 1 : 0)]; \
417417   cached_twidth  = TEX->line; \
418418   cached_tbase   = TEX->tmem; \
r7640r7641
36273627   texture_rectangle_16bit = rdp_texture_rectangle_16bit_func[((((other_modes.z_update_en | other_modes.z_source_sel) << 3) | ((other_modes.z_compare_en | other_modes.z_source_sel) << 2) | other_modes.cycle_type) << 2) | other_modes.rgb_dither_sel];
36283628   fill_rectangle_16bit = rdp_fill_rectangle_16bit_func[(other_modes.cycle_type << 2) | other_modes.rgb_dither_sel];
36293629
3630   alpha_cvg_get = rdp_alpha_cvg_func[(other_modes.cvg_times_alpha << 1) | other_modes.alpha_cvg_select];
3630   alpha_cvg_get = rdp_alpha_cvg_func[(other_modes.cvg_times_alpha << 1) | (other_modes.alpha_cvg_select ? 1 : 0)];
36313631
3632   alpha_compare = rdp_alpha_compare_func[(other_modes.alpha_compare_en << 1) | other_modes.dither_alpha_en];
3632   alpha_compare = rdp_alpha_compare_func[(other_modes.alpha_compare_en << 1) | (other_modes.dither_alpha_en ? 1 : 0)];
36333633
3634   z_compare = rdp_z_compare_func[(other_modes.z_mode << 2) | (other_modes.antialias_en << 1) | other_modes.image_read_en];
3634   z_compare = rdp_z_compare_func[(other_modes.z_mode << 2) | (other_modes.antialias_en << 1) | (other_modes.image_read_en ? 1 : 0)];
36353635
36363636   render_spans_16_ns_nt_nz_nf = rdp_render_spans_16_func[0 + ((other_modes.cycle_type & 1) | (other_modes.z_compare_en << 5) | (other_modes.z_update_en << 6) | (other_modes.rgb_dither_sel << 7))];
36373637   render_spans_16_ns_nt_z_nf = rdp_render_spans_16_func[2 + ((other_modes.cycle_type & 1) | (other_modes.z_compare_en << 5) | (other_modes.z_update_en << 6) | (other_modes.rgb_dither_sel << 7))];
r7640r7641
36523652
36533653   for(int index = 0; index < 8; index++)
36543654   {
3655      tile[index].fetch_index = (tile[index].size << 5) | (tile[index].format << 2) | (other_modes.en_tlut << 1) | other_modes.tlut_type;
3655      tile[index].fetch_index = (tile[index].size << 5) | (tile[index].format << 2) | (other_modes.en_tlut << 1) | (other_modes.tlut_type ? 1 : 0);
36563656   }
36573657
36583658   FBWRITE_16 = rdp_fbwrite_16_func[(other_modes.color_on_cvg << 3) | (other_modes.image_read_en << 2) | other_modes.cvg_dest];
36593659   FBWRITE_32 = rdp_fbwrite_32_func[(other_modes.color_on_cvg << 3) | (other_modes.image_read_en << 2) | other_modes.cvg_dest];
36603660
3661   BLENDER1_16_DITH = rdp_blender1_16_dith_func[(other_modes.force_blend << 4) | (other_modes.image_read_en << 3) | (other_modes.z_compare_en << 2) | ((other_modes.rgb_dither_sel >> 1) << 1) | other_modes.alpha_compare_en];
3662   BLENDER2_16_DITH = rdp_blender2_16_dith_func[(other_modes.force_blend << 4) | (other_modes.image_read_en << 3) | (other_modes.z_compare_en << 2) | ((other_modes.rgb_dither_sel >> 1) << 1) | other_modes.alpha_compare_en];
3663   BLENDER1_16_NDITH = rdp_blender1_16_ndith_func[(other_modes.force_blend << 3) | (other_modes.image_read_en << 2) | (other_modes.z_compare_en << 1) | other_modes.alpha_compare_en];
3664   BLENDER2_16_NDITH = rdp_blender2_16_ndith_func[(other_modes.force_blend << 3) | (other_modes.image_read_en << 2) | (other_modes.z_compare_en << 1) | other_modes.alpha_compare_en];
3661   BLENDER1_16_DITH = rdp_blender1_16_dith_func[(other_modes.force_blend << 4) | (other_modes.image_read_en << 3) | (other_modes.z_compare_en << 2) | ((other_modes.rgb_dither_sel >> 1) << 1) | (other_modes.alpha_compare_en ? 1 : 0)];
3662   BLENDER2_16_DITH = rdp_blender2_16_dith_func[(other_modes.force_blend << 4) | (other_modes.image_read_en << 3) | (other_modes.z_compare_en << 2) | ((other_modes.rgb_dither_sel >> 1) << 1) | (other_modes.alpha_compare_en ? 1 : 0)];
3663   BLENDER1_16_NDITH = rdp_blender1_16_ndith_func[(other_modes.force_blend << 3) | (other_modes.image_read_en << 2) | (other_modes.z_compare_en << 1) | (other_modes.alpha_compare_en ? 1 : 0)];
3664   BLENDER2_16_NDITH = rdp_blender2_16_ndith_func[(other_modes.force_blend << 3) | (other_modes.image_read_en << 2) | (other_modes.z_compare_en << 1) | (other_modes.alpha_compare_en ? 1 : 0)];
36653665
36663666   SET_BLENDER_INPUT(0, 0, &blender1a_r[0], &blender1a_g[0], &blender1a_b[0], &blender1b_a[0],
36673667                 other_modes.blend_m1a_0, other_modes.blend_m1b_0);
r7640r7641
37663766
37673767   switch (ti_size) // slindwords Neededby Vigilante 8
37683768   {
3769      case PIXEL_SIZE_4BIT:   ti_width2 >>= 1;    slindwords >>= 3;    width >>= 1;   break;
3770      case PIXEL_SIZE_8BIT:                   slindwords >>= 2;               break;
3769      case PIXEL_SIZE_4BIT:   ti_width2 >>= 1;   slindwords >>= 3;   width >>= 1;   break;
3770      case PIXEL_SIZE_8BIT:                  slindwords >>= 2;               break;
37713771      case PIXEL_SIZE_16BIT:   ti_width2 <<= 1;   slindwords >>= 1;   width <<= 1;   break;
3772      case PIXEL_SIZE_32BIT:   ti_width2 <<= 2;                   width <<= 2;   break;
3772      case PIXEL_SIZE_32BIT:   ti_width2 <<= 2;                  width <<= 2;   break;
37733773   }
37743774
37753775   if ((tb + (width >> 2)) > 0x400)
r7640r7641
39653965   tex_tile->ms      = (w2 >>  8) & 0x1;
39663966   tex_tile->mask_s   = (w2 >>  4) & 0xf;
39673967   tex_tile->shift_s   = (w2 >>  0) & 0xf;
3968   tex_tile->fetch_index = (tex_tile->size << 5) | (tex_tile->format << 2) | (other_modes.en_tlut << 1) | other_modes.tlut_type;
3968   tex_tile->fetch_index = (tex_tile->size << 5) | (tex_tile->format << 2) | (other_modes.en_tlut << 1) | (other_modes.tlut_type ? 1 : 0);
39693969
39703970   tex_tile->mask_s = (tex_tile->mask_s > 10) ? 10 : tex_tile->mask_s;
39713971   tex_tile->mask_t = (tex_tile->mask_t > 10) ? 10 : tex_tile->mask_t;
src/mame/video/hng64.c
r7640r7641
24412441
24422442               float intensity = vecDotProduct(transformedNormal, lightVector) * -1.0f;
24432443               intensity = (intensity <= 0.0f) ? (0.0f) : (intensity);
2444               intensity *= lightStrength * 128.0f * 0.5f;     // HACK.  This 0.5 is completely arbitrary.
2445               intensity *= 255.0f;
2444               intensity *= lightStrength * 128.0f;    // Turns 0x0100 into 1.0
2445               intensity *= 128.0;                     // Maps intensity to the range [0.0, 2.0]
24462446               if (intensity >= 255.0f) intensity = 255.0f;
24472447
24482448               polys[*numPolys].vert[v].light[0] = intensity;
r7640r7641
30973097               paletteEntry %= prOptions.palPageSize;
30983098               UINT32 color = machine->pens[prOptions.palOffset + paletteEntry];
30993099
3100               // Application of the lighting
3101               UINT32 red   = RGB_RED(color)   + (UINT8)(r_start/w_start);
3102               UINT32 green = RGB_GREEN(color) + (UINT8)(g_start/w_start);
3103               UINT32 blue  = RGB_BLUE(color)  + (UINT8)(b_start/w_start);
3100               // Apply the lighting
3101               float rIntensity = (r_start/w_start) / 255.0f;
3102               float gIntensity = (g_start/w_start) / 255.0f;
3103               float bIntensity = (b_start/w_start) / 255.0f;
3104               float red   = RGB_RED(color)   * rIntensity;
3105               float green = RGB_GREEN(color) * gIntensity;
3106               float blue  = RGB_BLUE(color)  * bIntensity;
31043107
31053108               // Clamp and finalize
3109               red = RGB_RED(color) + red;
3110               green = RGB_GREEN(color) + green;
3111               blue = RGB_BLUE(color) + blue;
3112
31063113               if (red >= 255) red = 255;
31073114               if (green >= 255) green = 255;
31083115               if (blue >= 255) blue = 255;
3116
31093117               color = MAKE_ARGB(255, (UINT8)red, (UINT8)green, (UINT8)blue);
31103118
31113119               *cb = color;
src/mame/video/cave.c
r7640r7641
543543{
544544   cave_state *state = (cave_state *)machine->driver_data;
545545   pen_t base_pal = 0;
546   const UINT8 *base_gfx = memory_region(machine, "gfx1");
547   int code_max = memory_region_length(machine, "gfx1") / (16*16);
546   const UINT8 *base_gfx = memory_region(machine, "sprites");
547   int code_max = memory_region_length(machine, "sprites") / (16*16);
548548
549549   UINT16 *source;
550550   UINT16 *finish;
r7640r7641
672672{
673673   cave_state *state = (cave_state *)machine->driver_data;
674674   pen_t base_pal = 0;
675   const UINT8 *base_gfx = memory_region(machine, "gfx1");
676   int code_max = memory_region_length(machine, "gfx1") / (16*16);
675   const UINT8 *base_gfx = memory_region(machine, "sprites");
676   int code_max = memory_region_length(machine, "sprites") / (16*16);
677677
678678   UINT16 *source;
679679   UINT16 *finish;
src/mame/layout/bigdeal.lay
r0r7641
1<?xml version="1.0"?>
2<mamelayout version="2">
3   <element name="hold1" defstate="0">
4      <rect state="1">
5         <color red="1.0" green="0.0" blue="0.0" />
6      </rect>
7      <rect state="0">
8         <color red="0.3" green="0.0" blue="0.0" />
9      </rect>
10      <text string="HOLD 1">
11         <color red="0.0" green="0.0" blue="0.0" />
12         <bounds x="0" y="0.1" width="1" height="0.4" />
13      </text>
14      <text string="RED">
15         <color red="0.0" green="0.0" blue="0.0" />
16         <bounds x="0" y="0.5" width="1" height="0.4" />
17      </text>
18   </element>
19
20   <element name="hold2" defstate="0">
21      <rect state="1">
22         <color red="1.0" green="0.0" blue="0.0" />
23      </rect>
24      <rect state="0">
25         <color red="0.3" green="0.0" blue="0.0" />
26      </rect>
27      <text string="HOLD 2">
28         <color red="0.0" green="0.0" blue="0.0" />
29         <bounds x="0" y="0.1" width="1" height="0.4" />
30      </text>
31      <text string="LOW">
32         <color red="0.0" green="0.0" blue="0.0" />
33         <bounds x="0" y="0.5" width="1" height="0.4" />
34      </text>
35   </element>
36
37   <element name="hold3" defstate="0">
38      <rect state="1">
39         <color red="1.0" green="0.0" blue="0.0" />
40      </rect>
41      <rect state="0">
42         <color red="0.3" green="0.0" blue="0.0" />
43      </rect>
44      <text string="HOLD 3">
45         <color red="0.0" green="0.0" blue="0.0" />
46         <bounds x="0" y="0.1" width="1" height="0.4" />
47      </text>
48      <text string="HALF">
49         <color red="0.0" green="0.0" blue="0.0" />
50         <bounds x="0" y="0.5" width="1" height="0.4" />
51      </text>
52   </element>
53
54   <element name="hold4" defstate="0">
55      <rect state="1">
56         <color red="1.0" green="0.0" blue="0.0" />
57      </rect>
58      <rect state="0">
59         <color red="0.3" green="0.0" blue="0.0" />
60      </rect>
61      <text string="HOLD 4">
62         <color red="0.0" green="0.0" blue="0.0" />
63         <bounds x="0" y="0.1" width="1" height="0.4" />
64      </text>
65      <text string="HIGH">
66         <color red="0.0" green="0.0" blue="0.0" />
67         <bounds x="0" y="0.5" width="1" height="0.4" />
68      </text>
69   </element>
70
71   <element name="hold5" defstate="0">
72      <rect state="1">
73         <color red="1.0" green="0.0" blue="0.0" />
74      </rect>
75      <rect state="0">
76         <color red="0.3" green="0.0" blue="0.0" />
77      </rect>
78      <text string="HOLD 5">
79         <color red="0.0" green="0.0" blue="0.0" />
80         <bounds x="0" y="0.1" width="1" height="0.4" />
81      </text>
82      <text string="BLACK">
83         <color red="0.0" green="0.0" blue="0.0" />
84         <bounds x="0" y="0.5" width="1" height="0.4" />
85      </text>
86   </element>
87
88   <element name="cancel" defstate="0">
89      <rect state="1">
90         <color red="0.0" green="1.0" blue="0.0" />
91      </rect>
92      <rect state="0">
93         <color red="0.0" green="0.3" blue="0.0" />
94      </rect>
95      <text string="CANCEL">
96         <color red="0.0" green="0.0" blue="0.0" />
97         <bounds x="0" y="0.2" width="1" height="0.6" />
98      </text>
99   </element>
100
101   <element name="start" defstate="0">
102      <rect state="1">
103         <color red="0.0" green="1.0" blue="0.0" />
104      </rect>
105      <rect state="0">
106         <color red="0.0" green="0.3" blue="0.0" />
107      </rect>
108      <text string="START">
109         <color red="0.0" green="0.0" blue="0.0" />
110         <bounds x="0" y="0.2" width="1" height="0.6" />
111      </text>
112   </element>
113
114   <view name="Button Lamps">
115      <screen index="0">
116         <bounds left="0" top="0" right="4" bottom="3" />
117      </screen>
118      <bezel name="lamp0" element="hold1">
119         <bounds x="0" y="3.13" width="0.55" height="0.24" />
120      </bezel>
121      <bezel name="lamp1" element="hold2">
122         <bounds x="0.65" y="3.13" width="0.55" height="0.24" />
123      </bezel>
124      <bezel name="lamp2" element="hold3">
125         <bounds x="1.3" y="3.13" width="0.55" height="0.24" />
126      </bezel>
127      <bezel name="lamp3" element="hold4">
128         <bounds x="1.95" y="3.13" width="0.55" height="0.24" />
129      </bezel>
130      <bezel name="lamp4" element="hold5">
131         <bounds x="2.6" y="3.13" width="0.55" height="0.24" />
132      </bezel>
133      <bezel name="lamp5" element="cancel">
134         <bounds x="3.45" y="3.02" width="0.55" height="0.24" />
135      </bezel>
136      <bezel name="lamp6" element="start">
137         <bounds x="3.45" y="3.28" width="0.55" height="0.24" />
138      </bezel>
139   </view>
140</mamelayout>
src/mame/layout/jollycrd.lay
r0r7641
1<?xml version="1.0"?>
2<mamelayout version="2">
3   <element name="hold1" defstate="0">
4      <rect state="1">
5         <color red="1.0" green="0.0" blue="0.0" />
6      </rect>
7      <rect state="0">
8         <color red="0.3" green="0.0" blue="0.0" />
9      </rect>
10      <text string="HOLD 1">
11         <color red="0.0" green="0.0" blue="0.0" />
12         <bounds x="0" y="0.2" width="1" height="0.6" />
13      </text>
14   </element>
15
16   <element name="hold2" defstate="0">
17      <rect state="1">
18         <color red="1.0" green="0.0" blue="0.0" />
19      </rect>
20      <rect state="0">
21         <color red="0.3" green="0.0" blue="0.0" />
22      </rect>
23      <text string="HOLD 2">
24         <color red="0.0" green="0.0" blue="0.0" />
25         <bounds x="0" y="0.1" width="1" height="0.4" />
26      </text>
27      <text string="LOW">
28         <color red="0.0" green="0.0" blue="0.0" />
29         <bounds x="0" y="0.5" width="1" height="0.4" />
30      </text>
31   </element>
32
33   <element name="hold3" defstate="0">
34      <rect state="1">
35         <color red="1.0" green="0.0" blue="0.0" />
36      </rect>
37      <rect state="0">
38         <color red="0.3" green="0.0" blue="0.0" />
39      </rect>
40      <text string="HOLD 3">
41         <color red="0.0" green="0.0" blue="0.0" />
42         <bounds x="0" y="0.2" width="1" height="0.6" />
43      </text>
44   </element>
45
46   <element name="hold4" defstate="0">
47      <rect state="1">
48         <color red="1.0" green="0.0" blue="0.0" />
49      </rect>
50      <rect state="0">
51         <color red="0.3" green="0.0" blue="0.0" />
52      </rect>
53      <text string="HOLD 4">
54         <color red="0.0" green="0.0" blue="0.0" />
55         <bounds x="0" y="0.1" width="1" height="0.4" />
56      </text>
57      <text string="HIGH">
58         <color red="0.0" green="0.0" blue="0.0" />
59         <bounds x="0" y="0.5" width="1" height="0.4" />
60      </text>
61   </element>
62
63   <element name="hold5" defstate="0">
64      <rect state="1">
65         <color red="1.0" green="0.0" blue="0.0" />
66      </rect>
67      <rect state="0">
68         <color red="0.3" green="0.0" blue="0.0" />
69      </rect>
70      <text string="HOLD 5">
71         <color red="0.0" green="0.0" blue="0.0" />
72         <bounds x="0" y="0.1" width="1" height="0.4" />
73      </text>
74      <text string="HALF">
75         <color red="0.0" green="0.0" blue="0.0" />
76         <bounds x="0" y="0.5" width="1" height="0.4" />
77      </text>
78   </element>
79
80   <element name="cancel" defstate="0">
81      <rect state="1">
82         <color red="0.0" green="1.0" blue="0.0" />
83      </rect>
84      <rect state="0">
85         <color red="0.0" green="0.3" blue="0.0" />
86      </rect>
87      <text string="CANCEL">
88         <color red="0.0" green="0.0" blue="0.0" />
89         <bounds x="0" y="0.2" width="1" height="0.6" />
90      </text>
91   </element>
92
93   <element name="start" defstate="0">
94      <rect state="1">
95         <color red="0.0" green="1.0" blue="0.0" />
96      </rect>
97      <rect state="0">
98         <color red="0.0" green="0.3" blue="0.0" />
99      </rect>
100      <text string="START">
101         <color red="0.0" green="0.0" blue="0.0" />
102         <bounds x="0" y="0.2" width="1" height="0.6" />
103      </text>
104   </element>
105
106   <view name="Button Lamps">
107      <screen index="0">
108         <bounds left="0" top="0" right="4" bottom="3" />
109      </screen>
110      <bezel name="lamp0" element="hold1">
111         <bounds x="0" y="3.13" width="0.55" height="0.24" />
112      </bezel>
113      <bezel name="lamp1" element="hold2">
114         <bounds x="0.65" y="3.13" width="0.55" height="0.24" />
115      </bezel>
116      <bezel name="lamp2" element="hold3">
117         <bounds x="1.3" y="3.13" width="0.55" height="0.24" />
118      </bezel>
119      <bezel name="lamp3" element="hold4">
120         <bounds x="1.95" y="3.13" width="0.55" height="0.24" />
121      </bezel>
122      <bezel name="lamp4" element="hold5">
123         <bounds x="2.6" y="3.13" width="0.55" height="0.24" />
124      </bezel>
125      <bezel name="lamp5" element="cancel">
126         <bounds x="3.45" y="3.02" width="0.55" height="0.24" />
127      </bezel>
128      <bezel name="lamp6" element="start">
129         <bounds x="3.45" y="3.28" width="0.55" height="0.24" />
130      </bezel>
131   </view>
132</mamelayout>
src/mame/layout/royalcrd.lay
r0r7641
1<?xml version="1.0"?>
2<mamelayout version="2">
3   <element name="hold1" defstate="0">
4      <rect state="1">
5         <color red="1.0" green="0.0" blue="0.0" />
6      </rect>
7      <rect state="0">
8         <color red="0.3" green="0.0" blue="0.0" />
9      </rect>
10      <text string="HOLD 1">
11         <color red="0.0" green="0.0" blue="0.0" />
12         <bounds x="0" y="0.1" width="1" height="0.4" />
13      </text>
14      <text string="HIGH">
15         <color red="0.0" green="0.0" blue="0.0" />
16         <bounds x="0" y="0.5" width="1" height="0.4" />
17      </text>
18   </element>
19
20   <element name="hold2" defstate="0">
21      <rect state="1">
22         <color red="1.0" green="0.0" blue="0.0" />
23      </rect>
24      <rect state="0">
25         <color red="0.3" green="0.0" blue="0.0" />
26      </rect>
27      <text string="HOLD 2">
28         <color red="0.0" green="0.0" blue="0.0" />
29         <bounds x="0" y="0.2" width="1" height="0.6" />
30      </text>
31   </element>
32
33   <element name="hold3" defstate="0">
34      <rect state="1">
35         <color red="1.0" green="0.0" blue="0.0" />
36      </rect>
37      <rect state="0">
38         <color red="0.3" green="0.0" blue="0.0" />
39      </rect>
40      <text string="HOLD 3">
41         <color red="0.0" green="0.0" blue="0.0" />
42         <bounds x="0" y="0.1" width="1" height="0.4" />
43      </text>
44      <text string="LOW">
45         <color red="0.0" green="0.0" blue="0.0" />
46         <bounds x="0" y="0.5" width="1" height="0.4" />
47      </text>
48   </element>
49
50   <element name="hold4" defstate="0">
51      <rect state="1">
52         <color red="1.0" green="0.0" blue="0.0" />
53      </rect>
54      <rect state="0">
55         <color red="0.3" green="0.0" blue="0.0" />
56      </rect>
57      <text string="HOLD 4">
58         <color red="0.0" green="0.0" blue="0.0" />
59         <bounds x="0" y="0.1" width="1" height="0.4" />
60      </text>
61      <text string="TAKE">
62         <color red="0.0" green="0.0" blue="0.0" />
63         <bounds x="0" y="0.5" width="1" height="0.4" />
64      </text>
65   </element>
66
67   <element name="hold5" defstate="0">
68      <rect state="1">
69         <color red="1.0" green="0.0" blue="0.0" />
70      </rect>
71      <rect state="0">
72         <color red="0.3" green="0.0" blue="0.0" />
73      </rect>
74      <text string="HOLD 5">
75         <color red="0.0" green="0.0" blue="0.0" />
76         <bounds x="0" y="0.1" width="1" height="0.4" />
77      </text>
78      <text string="HALF">
79         <color red="0.0" green="0.0" blue="0.0" />
80         <bounds x="0" y="0.5" width="1" height="0.4" />
81      </text>
82   </element>
83
84   <element name="cancel" defstate="0">
85      <rect state="1">
86         <color red="0.0" green="1.0" blue="0.0" />
87      </rect>
88      <rect state="0">
89         <color red="0.0" green="0.3" blue="0.0" />
90      </rect>
91      <text string="CANCEL">
92         <color red="0.0" green="0.0" blue="0.0" />
93         <bounds x="0" y="0.2" width="1" height="0.6" />
94      </text>
95   </element>
96
97   <element name="start" defstate="0">
98      <rect state="1">
99         <color red="0.0" green="1.0" blue="0.0" />
100      </rect>
101      <rect state="0">
102         <color red="0.0" green="0.3" blue="0.0" />
103      </rect>
104      <text string="START">
105         <color red="0.0" green="0.0" blue="0.0" />
106         <bounds x="0" y="0.2" width="1" height="0.6" />
107      </text>
108   </element>
109
110   <view name="Button Lamps">
111      <screen index="0">
112         <bounds left="0" top="0" right="4" bottom="3" />
113      </screen>
114      <bezel name="lamp0" element="hold2">
115         <bounds x="0.65" y="3.13" width="0.55" height="0.24" />
116      </bezel>
117      <bezel name="lamp1" element="hold3">
118         <bounds x="1.3" y="3.13" width="0.55" height="0.24" />
119      </bezel>
120      <bezel name="lamp2" element="cancel">
121         <bounds x="3.45" y="3.02" width="0.55" height="0.24" />
122      </bezel>
123      <bezel name="lamp3" element="hold1">
124         <bounds x="0" y="3.13" width="0.55" height="0.24" />
125      </bezel>
126      <bezel name="lamp4" element="hold5">
127         <bounds x="2.6" y="3.13" width="0.55" height="0.24" />
128      </bezel>
129      <bezel name="lamp5" element="hold4">
130         <bounds x="1.95" y="3.13" width="0.55" height="0.24" />
131      </bezel>
132      <bezel name="lamp6" element="start">
133         <bounds x="3.45" y="3.28" width="0.55" height="0.24" />
134      </bezel>
135   </view>
136</mamelayout>
src/mame/layout/namcofl.lay
r0r7641
1<?xml version="1.0"?>
2<mamelayout version="2">
3   <element name="shifter" defstate="0">
4      <rect>
5         <bounds left="0" right="32" top="0" bottom="64" />
6         <color red="0.8" green="0.0" blue="0.0" />
7      </rect>
8      <rect>
9         <bounds left="2" right="30" top="2" bottom="62" />
10         <color red="0.0" green="0.0" blue="0.0" />
11      </rect>
12      <rect>
13         <bounds left="14" right="18" top="15" bottom="49" />
14         <color red="0.5" green="0.5" blue="0.5" />
15      </rect>
16      <disk>
17         <bounds left="14" right="18" top="13" bottom="17" />
18         <color red="0.5" green="0.5" blue="0.5" />
19      </disk>
20      <disk>
21         <bounds left="14" right="18" top="47" bottom="51" />
22         <color red="0.5" green="0.5" blue="0.5" />
23      </disk>
24      <text string="LOW" state="0">
25         <bounds left="3" right="29" top="2" bottom="12" />
26         <color red="1.0" green="1.0" blue="0.0" />
27      </text>
28      <text string="LOW" state="1">
29         <bounds left="3" right="29" top="2" bottom="12" />
30         <color red="1.0" green="1.0" blue="1.0" />
31      </text>
32
33      <text string="HIGH" state="0">
34         <bounds left="3" right="29" top="52" bottom="62" />
35         <color red="1.0" green="1.0" blue="1.0" />
36      </text>
37      <text string="HIGH" state="1">
38         <bounds left="3" right="29" top="52" bottom="62" />
39         <color red="1.0" green="1.0" blue="0.0" />
40      </text>
41      <disk state="0">
42         <bounds left="9" right="23" top="14" bottom="28" />
43         <color red="0.8" green="0.0" blue="0.0" />
44      </disk>
45      <disk state="1">
46         <bounds left="9" right="23" top="36" bottom="50" />
47         <color red="0.8" green="0.0" blue="0.0" />
48      </disk>
49   </element>
50   <view name="Shifter-R">
51      <screen index="0">
52         <bounds x="0" y="0" width="640" height="480" />
53      </screen>     
54      <bezel element="shifter" inputtag="IN1" inputmask="0x10">
55         <bounds x="606" y="414" width="32" height="64" />
56         <color alpha="0.9" />
57      </bezel>
58   </view>
59   <view name="Shifter-L">
60      <screen index="0">
61         <bounds x="0" y="0" width="640" height="480" />
62      </screen>     
63      <bezel element="shifter" inputtag="IN1" inputmask="0x10">
64         <bounds x="2" y="414" width="32" height="64" />
65         <color alpha="0.9" />
66      </bezel>
67   </view>
68</mamelayout>
src/mame/drivers/pasha2.c
r7640r7641
7676#include "machine/eeprom.h"
7777#include "sound/okim6295.h"
7878
79static UINT16 *bitmap0, *bitmap1, *wram;
80static int vbuffer = 0;
81static int old_bank;
79class pasha2_state
80{
81public:
82   static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pasha2_state(machine)); }
8283
84   pasha2_state(running_machine &machine) { }
85
86   /* memory pointers */
87   UINT16 *     bitmap0;
88   UINT16 *     bitmap1;
89   UINT16 *     paletteram;
90   UINT16 *     wram;
91
92   /* video-related */
93   int vbuffer;
94   int old_bank;
95};
96
97
8398static WRITE16_HANDLER( pasha2_misc_w )
8499{
85   if(offset)
100   pasha2_state *state = (pasha2_state *)space->machine->driver_data;
101
102   if (offset)
86103   {
87      if(data & 0x0800)
104      if (data & 0x0800)
88105      {
89106         int bank = data & 0xf000;
90107
91         if(bank != old_bank)
108         if (bank != state->old_bank)
92109         {
93            old_bank = bank;
110            state->old_bank = bank;
94111
95            switch(bank)
112            switch (bank)
96113            {
97114               case 0x8000:
98115               case 0x9000:
r7640r7641
109126
110127static WRITE16_HANDLER( pasha2_palette_w )
111128{
129   pasha2_state *state = (pasha2_state *)space->machine->driver_data;
112130   int color;
113   COMBINE_DATA(&space->machine->generic.paletteram.u16[offset]);
114131
132   COMBINE_DATA(&state->paletteram[offset]);
133
115134   offset &= 0xff;
116135
117   color = (space->machine->generic.paletteram.u16[offset] >> 8) | (space->machine->generic.paletteram.u16[offset+0x100] & 0xff00);
118   palette_set_color_rgb(space->machine,offset*2+0,pal5bit(color),pal5bit(color >> 5),pal5bit(color >> 10));
136   color = (state->paletteram[offset] >> 8) | (state->paletteram[offset + 0x100] & 0xff00);
137   palette_set_color_rgb(space->machine, offset * 2 + 0, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
119138
120   color = (space->machine->generic.paletteram.u16[offset] & 0xff) | ((space->machine->generic.paletteram.u16[offset+0x100] & 0xff) << 8);
121   palette_set_color_rgb(space->machine,offset*2+1,pal5bit(color),pal5bit(color >> 5),pal5bit(color >> 10));
139   color = (state->paletteram[offset] & 0xff) | ((state->paletteram[offset + 0x100] & 0xff) << 8);
140   palette_set_color_rgb(space->machine, offset * 2 + 1, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
122141}
123142
124143static WRITE16_HANDLER( vbuffer_set_w )
125144{
126   vbuffer = 1;
145   pasha2_state *state = (pasha2_state *)space->machine->driver_data;
146   state->vbuffer = 1;
127147}
128148
129149static WRITE16_HANDLER( vbuffer_clear_w )
130150{
131   vbuffer = 0;
151   pasha2_state *state = (pasha2_state *)space->machine->driver_data;
152   state->vbuffer = 0;
132153}
133154
134155static WRITE16_HANDLER( bitmap_0_w )
135156{
136   COMBINE_DATA(&bitmap0[offset + vbuffer*0x20000/2]);
157   pasha2_state *state = (pasha2_state *)space->machine->driver_data;
158   COMBINE_DATA(&state->bitmap0[offset + state->vbuffer * 0x20000 / 2]);
137159}
138160
139161static WRITE16_HANDLER( bitmap_1_w )
140162{
163   pasha2_state *state = (pasha2_state *)space->machine->driver_data;
164
141165   // handle overlapping pixels without writing them
142   switch(mem_mask)
166   switch (mem_mask)
143167   {
144168      case 0xffff:
145         bitmap_1_w(space,offset,data,0xff00);
146         bitmap_1_w(space,offset,data,0x00ff);
169         bitmap_1_w(space, offset, data, 0xff00);
170         bitmap_1_w(space, offset, data, 0x00ff);
147171         return;
148172
149173      case 0xff00:
150         if((data & 0xff00) == 0xff00)
174         if ((data & 0xff00) == 0xff00)
151175            return;
152176      break;
153177
154178      case 0x00ff:
155         if((data & 0x00ff) == 0x00ff)
179         if ((data & 0x00ff) == 0x00ff)
156180            return;
157181      break;
158182   }
159183
160   COMBINE_DATA(&bitmap1[offset + vbuffer*0x20000/2]);
184   COMBINE_DATA(&state->bitmap1[offset + state->vbuffer * 0x20000 / 2]);
161185}
162186
163187static READ16_DEVICE_HANDLER( oki_r )
164188{
165   if(offset)
189   if (offset)
166190      return okim6295_r(device, 0);
167191   else
168192      return 0;
r7640r7641
170194
171195static WRITE16_DEVICE_HANDLER( oki_w )
172196{
173   if(offset)
197   if (offset)
174198      okim6295_w(device, 0, data);
175199}
176200
177201static WRITE16_DEVICE_HANDLER( oki_bank_w )
178202{
179   if(offset)
203   if (offset)
180204      okim6295_set_bank_base(device, (data & 1) * 0x40000);
181205}
182206
183207static WRITE16_HANDLER( pasha2_lamps_w )
184208{
185   if(data)
209   if (data)
186210      popmessage("1P: %c%c%c 2P: %c%c%c 3P: %c%c%c",
187211            (data & 0x001) ? 'R' : '-',
188212            (data & 0x002) ? 'G' : '-',
r7640r7641
196220}
197221
198222static ADDRESS_MAP_START( pasha2_map, ADDRESS_SPACE_PROGRAM, 16 )
199   AM_RANGE(0x00000000, 0x001fffff) AM_RAM   AM_BASE(&wram)
223   AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_BASE_MEMBER(pasha2_state, wram)
200224   AM_RANGE(0x40000000, 0x4001ffff) AM_RAM_WRITE(bitmap_0_w)
201225   AM_RANGE(0x40020000, 0x4003ffff) AM_RAM_WRITE(bitmap_1_w)
202226   AM_RANGE(0x40060000, 0x40060001) AM_WRITENOP
r7640r7641
207231   AM_RANGE(0x40074000, 0x40074001) AM_WRITE(vbuffer_set_w)
208232   AM_RANGE(0x40078000, 0x40078001) AM_WRITENOP //once at startup -> to disable the eeprom?
209233   AM_RANGE(0x80000000, 0x803fffff) AM_ROMBANK("bank1")
210   AM_RANGE(0xe0000000, 0xe00003ff) AM_RAM_WRITE(pasha2_palette_w) AM_BASE_GENERIC(paletteram) //tilemap? palette?
234   AM_RANGE(0xe0000000, 0xe00003ff) AM_RAM_WRITE(pasha2_palette_w) AM_BASE_MEMBER(pasha2_state, paletteram) //tilemap? palette?
211235   AM_RANGE(0xfff80000, 0xffffffff) AM_ROM AM_REGION("user1",0)
212236ADDRESS_MAP_END
213237
r7640r7641
315339
316340static VIDEO_START( pasha2 )
317341{
318   bitmap0 = auto_alloc_array(machine, UINT16, 0x40000/2);
319   bitmap1 = auto_alloc_array(machine, UINT16, 0x40000/2);
342   pasha2_state *state = (pasha2_state *)machine->driver_data;
343   state->bitmap0 = auto_alloc_array(machine, UINT16, 0x40000/2);
344   state->bitmap1 = auto_alloc_array(machine, UINT16, 0x40000/2);
345
346   state_save_register_global_pointer(machine, state->bitmap0, 0x40000/2);
347   state_save_register_global_pointer(machine, state->bitmap1, 0x40000/2);
320348}
321349
322350static VIDEO_UPDATE( pasha2 )
323351{
324   int x,y,count;
352   pasha2_state *state = (pasha2_state *)screen->machine->driver_data;
353   int x, y, count;
325354   int color;
326355
327356   /* 2 512x256 bitmaps */
328357
329358   count = 0;
330   for (y=0;y <= cliprect->max_y;y++)
359   for (y = 0; y <= cliprect->max_y; y++)
331360   {
332      for (x=0;x < 512/2;x++)
361      for (x = 0; x < 512 / 2; x++)
333362      {
334         if(x*2 < cliprect->max_x)
363         if (x * 2 < cliprect->max_x)
335364         {
336            color = (bitmap0[count + (vbuffer^1)*0x20000/2] & 0xff00) >> 8;
337            *BITMAP_ADDR16(bitmap, y, x*2 + 0) = color + 0x100;
365            color = (state->bitmap0[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff00) >> 8;
366            *BITMAP_ADDR16(bitmap, y, x * 2 + 0) = color + 0x100;
338367
339            color = bitmap0[count + (vbuffer^1)*0x20000/2] & 0xff;
340            *BITMAP_ADDR16(bitmap, y, x*2 + 1) = color + 0x100;
368            color = state->bitmap0[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff;
369            *BITMAP_ADDR16(bitmap, y, x * 2 + 1) = color + 0x100;
341370         }
342371
343372         count++;
r7640r7641
345374   }
346375
347376   count = 0;
348   for (y=0;y <= cliprect->max_y;y++)
377   for (y = 0; y <= cliprect->max_y; y++)
349378   {
350      for (x=0;x < 512/2;x++)
379      for (x = 0; x < 512 / 2; x++)
351380      {
352         if(x*2 < cliprect->max_x)
381         if (x * 2 < cliprect->max_x)
353382         {
354            color = bitmap1[count + (vbuffer^1)*0x20000/2] & 0xff;
355            if(color != 0)
356               *BITMAP_ADDR16(bitmap, y, x*2 + 1) = color;
383            color = state->bitmap1[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff;
384            if (color != 0)
385               *BITMAP_ADDR16(bitmap, y, x * 2 + 1) = color;
357386
358            color = (bitmap1[count + (vbuffer^1)*0x20000/2] & 0xff00) >> 8;
359            if(color != 0)
360               *BITMAP_ADDR16(bitmap, y, x*2 + 0) = color;
387            color = (state->bitmap1[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff00) >> 8;
388            if (color != 0)
389               *BITMAP_ADDR16(bitmap, y, x * 2 + 0) = color;
361390         }
362391
363392         count++;
r7640r7641
367396   return 0;
368397}
369398
399static MACHINE_START( pasha2 )
400{
401   pasha2_state *state = (pasha2_state *)machine->driver_data;
402
403   state_save_register_global(machine, state->old_bank);
404   state_save_register_global(machine, state->vbuffer);
405}
406
370407static MACHINE_RESET( pasha2 )
371408{
372   old_bank = -1;
373   vbuffer = 0;
409   pasha2_state *state = (pasha2_state *)machine->driver_data;
410
411   state->old_bank = -1;
412   state->vbuffer = 0;
374413}
375414
376415static MACHINE_DRIVER_START( pasha2 )
416
417   /* driver data */
418   MDRV_DRIVER_DATA(pasha2_state)
419
420   /* basic machine hardware */
377421   MDRV_CPU_ADD("maincpu", E116XT, 20000000*4)      /* 4x internal multiplier */
378422   MDRV_CPU_PROGRAM_MAP(pasha2_map)
379423   MDRV_CPU_IO_MAP(pasha2_io)
380424   MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
381425
426   MDRV_MACHINE_START(pasha2)
382427   MDRV_MACHINE_RESET(pasha2)
383428   MDRV_EEPROM_93C46_ADD("eeprom")
384429
r7640r7641
435480
436481static READ16_HANDLER( pasha2_speedup_r )
437482{
483   pasha2_state *state = (pasha2_state *)space->machine->driver_data;
484
438485   if(cpu_get_pc(space->cpu) == 0x8302)
439   {
440486      cpu_spinuntil_int(space->cpu);
441   }
442487
443   return wram[(0x95744/2)+offset];
488   return state->wram[(0x95744 / 2) + offset];
444489}
445490
446491static DRIVER_INIT( pasha2 )
r7640r7641
450495   memory_set_bankptr(machine, "bank1", memory_region(machine, "user2"));
451496}
452497
453GAME( 1998, pasha2, 0, pasha2, pasha2, pasha2, ROT0, "Dong Sung", "Pasha Pasha 2", GAME_IMPERFECT_SOUND )
498GAME( 1998, pasha2, 0, pasha2, pasha2, pasha2, ROT0, "Dong Sung", "Pasha Pasha 2", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
src/mame/drivers/yiear.c
r7640r7641
220220   MDRV_DRIVER_DATA(trackfld_state)
221221
222222   /* basic machine hardware */
223   MDRV_CPU_ADD("maincpu", M6809,XTAL_18_432MHz/16)   /* verified on pcb */
223   MDRV_CPU_ADD("maincpu", M6809,XTAL_18_432MHz/12)   /* verified on pcb */
224224   MDRV_CPU_PROGRAM_MAP(main_map)
225225   MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
226   MDRV_CPU_PERIODIC_INT(yiear_nmi_interrupt,500)   /* music tempo (correct frequency unknown) */
226   MDRV_CPU_PERIODIC_INT(yiear_nmi_interrupt,480)   /* music tempo (correct frequency unknown) */
227227
228228   MDRV_MACHINE_START(yiear)
229229   MDRV_MACHINE_RESET(yiear)
r7640r7641
246246   /* sound hardware */
247247   MDRV_SPEAKER_STANDARD_MONO("mono")
248248
249   MDRV_SOUND_ADD("snsnd", SN76489A, XTAL_18_432MHz/16)   /* verified on pcb */
249   MDRV_SOUND_ADD("snsnd", SN76489A, XTAL_18_432MHz/12)   /* verified on pcb */
250250   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
251251
252252   MDRV_SOUND_ADD("vlm", VLM5030, XTAL_3_579545MHz)   /* verified on pcb */
src/mame/drivers/zn.c
r7640r7641
115115   { "ts2",      cp01, cp02 }, /* OK */
116116   { "ts2j",     cp01, cp02 }, /* OK */
117117   { "starglad", cp01, cp03 }, /* OK */
118   { "stargladj",cp01, cp03 }, /* OK */
118119   { "sfex",     cp01, cp04 }, /* OK */
119120   { "sfexa",    cp01, cp04 }, /* OK */
120121   { "sfexj",    cp01, cp04 }, /* OK */
r7640r7641
30163017   ROM_LOAD16_WORD_SWAP( "ps1-01m.3b",   0x000000, 0x400000, CRC(0bfb17aa) SHA1(cf4482785a2a33ad814c8b1461c5bc8e8e027895) )
30173018ROM_END
30183019
3020ROM_START( stargladj )
3021   CPZN1_BIOS
3022
3023   ROM_REGION32_LE( 0x80000, "user3", 0 )
3024   ROM_LOAD( "ps1j-04.2h",   0x000000, 0x080000, CRC(f865006d) SHA1(6abb476777a4309b1a60f12e6313c051db195808) )
3025
3026   ROM_REGION32_LE( 0x2400000, "user2", 0 )
3027   ROM_LOAD( "ps1-05m.3h", 0x0000000, 0x400000, CRC(8ad72c4f) SHA1(c848c37eb5365000b4d4720b5c08d89ddd8e2c33) )
3028   ROM_LOAD( "ps1-06m.4h", 0x0400000, 0x400000, CRC(95d8ed61) SHA1(e9f259d589dc38a8321a6fea1f5dac741cadc0ff) )
3029   ROM_LOAD( "ps1-07m.5h", 0x0800000, 0x400000, CRC(c06752db) SHA1(0884b308e9cd9dde8660b422bc8fec9a362bcb52) )
3030   ROM_LOAD( "ps1-08m.2k", 0x0c00000, 0x400000, CRC(381f9ded) SHA1(b7878a90740f5b3c5881ac7d46e2b84b18727337) )
3031   ROM_LOAD( "ps1-09m.3k", 0x1000000, 0x400000, CRC(bd894812) SHA1(9f0c3365e685a53ae793f4a256a6c177a843a424) )
3032   ROM_LOAD( "ps1-10m.4k", 0x1400000, 0x400000, CRC(ff80c18a) SHA1(8d01717eed6ec1f508fe7c445da941fb84ef7d22) )
3033
3034   ROM_REGION( 0x50000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */
3035   ROM_LOAD( "ps1-02a.2e",   0x000000, 0x008000, CRC(b854df92) SHA1(ea71a613b5b19ec7e9c6e342e7743d320582a6bb) )
3036   ROM_CONTINUE(             0x010000, 0x018000 )
3037   ROM_LOAD( "ps1-03a.3e",   0x028000, 0x020000, CRC(a2562fbb) SHA1(3de02a4aa7ea620961ca2a5c331f38134033db79) )
3038
3039   ROM_REGION( 0x400000, "qsound", 0 ) /* Q Sound Samples */
3040   ROM_LOAD16_WORD_SWAP( "ps1-01m.3b",   0x000000, 0x400000, CRC(0bfb17aa) SHA1(cf4482785a2a33ad814c8b1461c5bc8e8e027895) )
3041ROM_END
3042
30193043ROM_START( ts2 )
30203044   CPZN1_BIOS
30213045
r7640r7641
44114435/* it in every zip file */
44124436GAME( 1995, cpzn1,    0,        coh1000c, zn,   coh1000c, ROT0, "Sony/Capcom", "ZN1", GAME_IS_BIOS_ROOT )
44134437
4414GAME( 1995, ts2,      cpzn1,    coh1000c, zn6b, coh1000c, ROT0, "Capcom/Takara", "Battle Arena Toshinden 2 (USA 951124)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4415GAME( 1995, ts2j,     ts2,      coh1000c, zn6b, coh1000c, ROT0, "Capcom/Takara", "Battle Arena Toshinden 2 (JAPAN 951124)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4416GAME( 1996, starglad, cpzn1,    coh1000c, zn6b, coh1000c, ROT0, "Capcom", "Star Gladiator (USA 960627)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4417GAME( 1996, sfex,     cpzn1,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (EURO 961219)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4418GAME( 1996, sfexu,    sfex,     coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (USA 961219)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4419GAME( 1996, sfexa,    sfex,     coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (ASIA 961219)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4420GAME( 1996, sfexj,    sfex,     coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (JAPAN 961130)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4421GAME( 1996, glpracr,  cpzn1,    coh1000c, zn,   coh1000c, ROT0, "Tecmo", "Gallop Racer (JAPAN Ver 9.01.12)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4422GAME( 1997, sfexp,    cpzn1,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX Plus (USA 970407)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4423GAME( 1997, sfexpu1,  sfexp,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX Plus (USA 970311)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4424GAME( 1997, sfexpj,   sfexp,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX Plus (JAPAN 970311)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4438GAME( 1995, ts2,       cpzn1,    coh1000c, zn6b, coh1000c, ROT0, "Capcom/Takara", "Battle Arena Toshinden 2 (USA 951124)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4439GAME( 1995, ts2j,      ts2,      coh1000c, zn6b, coh1000c, ROT0, "Capcom/Takara", "Battle Arena Toshinden 2 (JAPAN 951124)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4440GAME( 1996, starglad,  cpzn1,    coh1000c, zn6b, coh1000c, ROT0, "Capcom", "Star Gladiator (USA 960627)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4441GAME( 1996, stargladj, starglad, coh1000c, zn6b, coh1000c, ROT0, "Capcom", "Star Gladiator (JAPAN 960627)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4442GAME( 1996, sfex,      cpzn1,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (EURO 961219)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4443GAME( 1996, sfexu,     sfex,     coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (USA 961219)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4444GAME( 1996, sfexa,     sfex,     coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (ASIA 961219)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4445GAME( 1996, sfexj,     sfex,     coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX (JAPAN 961130)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4446GAME( 1996, glpracr,   cpzn1,    coh1000c, zn,   coh1000c, ROT0, "Tecmo", "Gallop Racer (JAPAN Ver 9.01.12)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4447GAME( 1997, sfexp,     cpzn1,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX Plus (USA 970407)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4448GAME( 1997, sfexpu1,   sfexp,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX Plus (USA 970311)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
4449GAME( 1997, sfexpj,    sfexp,    coh1002c, zn6b, coh1000c, ROT0, "Capcom/Arika", "Street Fighter EX Plus (JAPAN 970311)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
44254450
44264451/* Capcom ZN2 */
44274452
src/mame/drivers/paradise.c
r7640r7641
11/***************************************************************************
22
3                              -= Paradise / Target Ball / Torus =-
3                 -= Paradise / Target Ball / Torus =-
44
5                    driver by   Luca Elia (l.elia@tin.it)
5                 driver by   Luca Elia (l.elia@tin.it)
66
77
88CPU          :  Z8400B
r7640r7641
4444static WRITE8_HANDLER( paradise_rombank_w )
4545{
4646   int bank = data;
47   int bank_n = memory_region_length(space->machine, "maincpu")/0x4000 - 1;
47   int bank_n = memory_region_length(space->machine, "maincpu") / 0x4000 - 1;
48
4849   if (bank >= bank_n)
4950   {
50      logerror("PC %04X - invalid rom bank %x\n",cpu_get_pc(space->cpu),bank);
51      logerror("PC %04X - invalid rom bank %x\n", cpu_get_pc(space->cpu), bank);
5152      bank %= bank_n;
5253   }
5354
54   if (bank >= 3)   bank+=1;
55   memory_set_bankptr(space->machine, "bank1", memory_region(space->machine, "maincpu") + bank * 0x4000);
55   memory_set_bank(space->machine, "bank1", bank);
5656}
5757
5858static WRITE8_DEVICE_HANDLER( paradise_okibank_w )
5959{
60   if (data & ~0x02)   logerror("%s: unknown oki bank bits %02X\n",cpuexec_describe_context(device->machine),data);
60   if (data & ~0x02)
61      logerror("%s: unknown oki bank bits %02X\n", cpuexec_describe_context(device->machine), data);
6162
6263   okim6295_set_bank_base(device, (data & 0x02) ? 0x40000 : 0);
6364}
r7640r7641
7071#define STANDARD_MAP   \
7172   AM_RANGE(0x0000, 0x7fff) AM_ROM   /* ROM */   \
7273   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")   /* ROM (banked) */ \
73   AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(paradise_vram_2_w) AM_BASE(&paradise_vram_2   )   /* Background */ \
74   AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(paradise_vram_1_w) AM_BASE(&paradise_vram_1   )   /* Midground */ \
75   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(paradise_vram_0_w) AM_BASE(&paradise_vram_0   )   /* Foreground */ \
74   AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(paradise_vram_2_w) AM_BASE_MEMBER(paradise_state, vram_2)   /* Background */ \
75   AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(paradise_vram_1_w) AM_BASE_MEMBER(paradise_state, vram_1)   /* Midground */ \
76   AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(paradise_vram_0_w) AM_BASE_MEMBER(paradise_state, vram_0)   /* Foreground */ \
7677
7778
7879static ADDRESS_MAP_START( paradise_map, ADDRESS_SPACE_PROGRAM, 8 )
7980   STANDARD_MAP
8081   AM_RANGE(0xd800, 0xd8ff) AM_RAM   // RAM
81   AM_RANGE(0xd900, 0xe0ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
82   AM_RANGE(0xd900, 0xe0ff) AM_RAM AM_BASE_SIZE_MEMBER(paradise_state, spriteram, spriteram_size)   // Sprites
8283   AM_RANGE(0xe100, 0xffff) AM_RAM   // RAM
8384ADDRESS_MAP_END
8485
8586static ADDRESS_MAP_START( tgtball_map, ADDRESS_SPACE_PROGRAM, 8 )
8687   STANDARD_MAP
8788   AM_RANGE(0xd800, 0xd8ff) AM_RAM   // RAM
88   AM_RANGE(0xd900, 0xd9ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
89   AM_RANGE(0xd900, 0xd9ff) AM_RAM AM_BASE_SIZE_MEMBER(paradise_state, spriteram, spriteram_size)   // Sprites
8990   AM_RANGE(0xda00, 0xffff) AM_RAM   // RAM
9091ADDRESS_MAP_END
9192
9293static ADDRESS_MAP_START( torus_map, ADDRESS_SPACE_PROGRAM, 8 )
9394   STANDARD_MAP
94   AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
95   AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE_SIZE_MEMBER(paradise_state, spriteram, spriteram_size)   // Sprites
9596   AM_RANGE(0xe000, 0xffff) AM_RAM   // RAM
9697ADDRESS_MAP_END
9798
9899static ADDRESS_MAP_START( paradise_io_map, ADDRESS_SPACE_IO, 8 )
99   AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_GENERIC(paletteram)   // Palette
100   AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w   )   // Layers priority
101   AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w   )   // Flip Screen
102   AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w   )   // Layers palette bank
103   AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w   )   // ROM bank
104   AM_RANGE(0x2007, 0x2007) AM_DEVWRITE("oki2", paradise_okibank_w   )   // OKI 1 samples bank
100   AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_MEMBER(paradise_state, paletteram)   // Palette
101   AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w)   // Layers priority
102   AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w)   // Flip Screen
103   AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w)   // Layers palette bank
104   AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w)   // ROM bank
105   AM_RANGE(0x2007, 0x2007) AM_DEVWRITE("oki2", paradise_okibank_w)   // OKI 1 samples bank
105106   AM_RANGE(0x2010, 0x2010) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)   // OKI 0
106   AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1"         )
107   AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2"         )
108   AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1"            )
109   AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2"            )
110   AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM"         )
107   AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1")
108   AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2")
109   AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1")
110   AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2")
111   AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM")
111112   AM_RANGE(0x2030, 0x2030) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)   // OKI 1
112   AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w   ) AM_BASE_GENERIC(videoram)    // Pixmap
113   AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w) AM_BASE_MEMBER(paradise_state, videoram)   // Pixmap
113114ADDRESS_MAP_END
114115
115116static ADDRESS_MAP_START( torus_io_map, ADDRESS_SPACE_IO, 8 )
116   AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_GENERIC(paletteram)   // Palette
117   AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w   )   // Layers priority
118   AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w   )   // Flip Screen
119   AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w   )   // Layers palette bank
120   AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w   )   // ROM bank
117   AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_MEMBER(paradise_state, paletteram)   // Palette
118   AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w)   // Layers priority
119   AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w)   // Flip Screen
120   AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w)   // Layers palette bank
121   AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w)   // ROM bank
121122   AM_RANGE(0x2010, 0x2010) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)   // OKI 0
122   AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1"         )
123   AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2"         )
124   AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1"            )
125   AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2"            )
126   AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM"         )
127   AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w   ) AM_BASE_GENERIC(videoram)    // Pixmap
123   AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1")
124   AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2")
125   AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1")
126   AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2")
127   AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM")
128   AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w) AM_BASE_MEMBER(paradise_state, videoram)   // Pixmap
128129ADDRESS_MAP_END
129130
130131
r7640r7641
540541
541542***************************************************************************/
542543
544static MACHINE_START( paradise )
545{
546   paradise_state *state = (paradise_state *)machine->driver_data;
547   int bank_n = memory_region_length(machine, "maincpu") / 0x4000 - 1;
548   UINT8 *ROM = memory_region(machine, "maincpu");
549
550   memory_configure_bank(machine, "bank1", 0, 3, &ROM[0x00000], 0x4000);
551   memory_configure_bank(machine, "bank1", 3, bank_n - 4, &ROM[0x10000], 0x4000);
552
553   state_save_register_global(machine, state->palbank);
554   state_save_register_global(machine, state->priority);
555}
556
557static MACHINE_RESET( paradise )
558{
559   paradise_state *state = (paradise_state *)machine->driver_data;
560
561   state->palbank = 0;
562   state->priority = 0;
563}
564
543565static MACHINE_DRIVER_START( paradise )
544566
567   /* driver data */
568   MDRV_DRIVER_DATA(paradise_state)
569
545570   /* basic machine hardware */
546571   MDRV_CPU_ADD("maincpu", Z80, XTAL_12MHz/2)         /* Z8400B - 6mhz Verified */
547572   MDRV_CPU_PROGRAM_MAP(paradise_map)
548573   MDRV_CPU_IO_MAP(paradise_io_map)
549574   MDRV_CPU_VBLANK_INT_HACK(irq0_line_hold,4)   /* No nmi routine */
550575
576   MDRV_MACHINE_START(paradise)
577   MDRV_MACHINE_RESET(paradise)
578
551579   /* video hardware */
552580   MDRV_SCREEN_ADD("screen", RASTER)
553581   MDRV_SCREEN_REFRESH_RATE(54) /* 54 verified */
r7640r7641
10171045
10181046static DRIVER_INIT (paradise)
10191047{
1020   paradise_sprite_inc = 0x20;
1048   paradise_state *state = (paradise_state *)machine->driver_data;
1049   state->sprite_inc = 0x20;
10211050}
10221051
10231052// Inverted flipscreen and sprites are packed in less memory (same number though)
10241053static DRIVER_INIT (tgtball)
10251054{
1026   paradise_sprite_inc = 4;
1055   paradise_state *state = (paradise_state *)machine->driver_data;
1056   state->sprite_inc = 4;
10271057   memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO), 0x2001, 0x2001, 0, 0, tgtball_flipscreen_w );
10281058}
10291059
10301060static DRIVER_INIT (torus)
10311061{
1032   paradise_sprite_inc = 4;
1062   paradise_state *state = (paradise_state *)machine->driver_data;
1063   state->sprite_inc = 4;
10331064   memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO), 0x2070, 0x2070, 0, 0, torus_coin_counter_w);
10341065}
10351066
r7640r7641
10401071
10411072***************************************************************************/
10421073
1043GAME( 1994+, paradise, 0,       paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise", 0 )
1044GAME( 1994+, paradlx,  0,       paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise Deluxe", GAME_IMPERFECT_GRAPHICS )
1045GAME( 1994+, para2dx , 0,       paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise 2 Deluxe", GAME_IMPERFECT_GRAPHICS )
1046GAME( 1995,  tgtball,  0,       tgtball,  tgtball,  tgtball,  ROT0,  "Yun Sung", "Target Ball (Nude)", 0 )
1047GAME( 1995,  tgtballa, tgtball, tgtball,  tgtball,  tgtball,  ROT0,  "Yun Sung", "Target Ball", 0 )
1048GAME( 1996,  torus,    0,       torus,    torus,    torus,    ROT90, "Yun Sung", "Torus", 0 )
1049GAME( 1998,  madball,  0,       madball,  madball,  tgtball,  ROT0,  "Yun Sung", "Mad Ball V2.0", 0 )
1050GAME( 1997,  madballn, madball, madball,  madball,  tgtball,  ROT0,  "Yun Sung", "Mad Ball V2.0 (With Nudity)", 0 )
1074GAME( 1994+, paradise, 0,       paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise", GAME_SUPPORTS_SAVE )
1075GAME( 1994+, paradlx,  0,       paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise Deluxe", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
1076GAME( 1994+, para2dx , 0,       paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise 2 Deluxe", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
1077GAME( 1995,  tgtball,  0,       tgtball,  tgtball,  tgtball,  ROT0,  "Yun Sung", "Target Ball (Nude)", GAME_SUPPORTS_SAVE )
1078GAME( 1995,  tgtballa, tgtball, tgtball,  tgtball,  tgtball,  ROT0,  "Yun Sung", "Target Ball", GAME_SUPPORTS_SAVE )
1079GAME( 1996,  torus,    0,       torus,    torus,    torus,    ROT90, "Yun Sung", "Torus", GAME_SUPPORTS_SAVE )
1080GAME( 1998,  madball,  0,       madball,  madball,  tgtball,  ROT0,  "Yun Sung", "Mad Ball V2.0", GAME_SUPPORTS_SAVE )
1081GAME( 1997,  madballn, madball, madball,  madball,  tgtball,  ROT0,  "Yun Sung", "Mad Ball V2.0 (With Nudity)", GAME_SUPPORTS_SAVE )
src/mame/drivers/segaybd.c
r7640r7641
17021702   ROM_LOAD16_BYTE( "ic25.bin",  0x000000, 0x20000, CRC(388b2365) SHA1(0f006f9120b96b8d8be968878ce1d6dd853cd977) )
17031703   ROM_LOAD16_BYTE( "ic24.bin",  0x000001, 0x20000, CRC(14dba5d4) SHA1(ad09c55273ab1105630f2f76019aedc234fb9292) )
17041704   ROM_LOAD16_BYTE( "ic27.bin",  0x040000, 0x20000, CRC(dc1cd5a4) SHA1(3b2b6afbeb7daa7c0cc75279bc495221c2508e25) )
1705   ROM_LOAD16_BYTE( "ic26.bin",  0x040001, 0x20000, CRC(969fdb3a) SHA1(2d98f1bab2c20cad3d4c20ee2c4022d04fa9ffce) )
1705   ROM_LOAD16_BYTE( "ic26.bin",  0x040001, 0x20000, BAD_DUMP CRC(969fdb3a) SHA1(2d98f1bab2c20cad3d4c20ee2c4022d04fa9ffce) ) //fails ROM checksum in service mode
17061706
17071707   ROM_REGION( 0x040000, "subx", 0 ) // X
17081708   ROM_LOAD16_BYTE( "ic81.bin",  0x000000, 0x20000, CRC(c5d525b6) SHA1(1fab7f761be67b67ee346a1af1f1fe12aef87dc5) )
src/mame/drivers/ddenlovr.c
r7640r7641
105105#include "includes/dynax.h"
106106
107107
108UINT8 *ddenlovr_pixmap[8];
109static int extra_layers;
110
111
112108/***************************************************************************
113109
114110                        Blitter Data Format
r7640r7641
135131
136132***************************************************************************/
137133
138static int ddenlovr_dest_layer;
139static int ddenlovr_blit_flip;
140static int ddenlovr_blit_x;
141static int ddenlovr_blit_y;
142static int ddenlovr_blit_address;
143static int ddenlovr_blit_pen,ddenlovr_blit_pen_mode;
144static int ddenlovr_blitter_irq_flag,ddenlovr_blitter_irq_enable;
145static int ddenlovr_rect_width, ddenlovr_rect_height;
146static int ddenlovr_clip_width, ddenlovr_clip_height;
147static int ddenlovr_line_length;
148static int ddenlovr_clip_ctrl,ddenlovr_clip_x,ddenlovr_clip_y;
149static int ddenlovr_scroll[8*2];
150static int ddenlovr_priority, ddenlovr_priority2;
151static int ddenlovr_bgcolor, ddenlovr_bgcolor2;
152static int ddenlovr_layer_enable, ddenlovr_layer_enable2;
153static int ddenlovr_palette_base[8], ddenlovr_palette_mask[8];
154static int ddenlovr_transparency_pen[8], ddenlovr_transparency_mask[8];
155static int ddenlovr_blit_reg;
156static int ddenlovr_blit_pen_mask;   // not implemented
157static int ddenlovr_blit_rom_bits;         // usually 8, 16 in hanakanz
158static const int *ddenlovr_blit_commands;
159
160134enum { BLIT_NEXT = 0, BLIT_LINE, BLIT_COPY, BLIT_SKIP, BLIT_CHANGE_NUM, BLIT_CHANGE_PEN, BLIT_UNKNOWN, BLIT_STOP };
161135//                                          0          1                2                   3               4               5                   6                   7
162136static const int ddenlovr_commands[8]   = { BLIT_NEXT, BLIT_LINE,      BLIT_COPY,         BLIT_SKIP,      BLIT_UNKNOWN,   BLIT_CHANGE_NUM,   BLIT_CHANGE_PEN,   BLIT_STOP   };
163137static const int hanakanz_commands[8]   = { BLIT_NEXT, BLIT_CHANGE_PEN,   BLIT_CHANGE_NUM,   BLIT_UNKNOWN,   BLIT_SKIP,      BLIT_COPY,         BLIT_LINE,         BLIT_STOP   };
164138static const int mjflove_commands[8]   = { BLIT_STOP, BLIT_CHANGE_PEN,   BLIT_CHANGE_NUM,   BLIT_UNKNOWN,   BLIT_SKIP,      BLIT_COPY,         BLIT_LINE,         BLIT_NEXT   };
165139
166VIDEO_START(ddenlovr)
140VIDEO_START( ddenlovr )
167141{
142   dynax_state *state = (dynax_state *)machine->driver_data;
168143   int i;
144
169145   for (i = 0; i < 8; i++)
170146   {
171      ddenlovr_pixmap[i] = auto_alloc_array(machine, UINT8, 512*512);
172      ddenlovr_scroll[i*2+0] = ddenlovr_scroll[i*2+1] = 0;
147      state->ddenlovr_pixmap[i] = auto_alloc_array(machine, UINT8, 512 * 512);
148      state->ddenlovr_scroll[i * 2 + 0] = state->ddenlovr_scroll[i * 2 + 1] = 0;
173149   }
174150
175   extra_layers = 0;
151   state->extra_layers = 0;
176152
177   ddenlovr_clip_ctrl = 0x0f;
178   ddenlovr_layer_enable = ddenlovr_layer_enable2 = 0x0f;
179   ddenlovr_blit_pen_mask = 0xff;
153   state->ddenlovr_clip_ctrl = 0x0f;
154   state->ddenlovr_layer_enable = state->ddenlovr_layer_enable2 = 0x0f;
155   state->ddenlovr_blit_pen_mask = 0xff;
180156
181157   // older games do not set these !?
182   ddenlovr_clip_width = 0x400;
183   ddenlovr_clip_height = 0x400;
158   state->ddenlovr_clip_width = 0x400;
159   state->ddenlovr_clip_height = 0x400;
184160
185   ddenlovr_blit_rom_bits = 8;
186   ddenlovr_blit_commands = ddenlovr_commands;
161   state->ddenlovr_blit_rom_bits = 8;
162   state->ddenlovr_blit_commands = ddenlovr_commands;
163
164   /* init to 0 the remaining elements */
165   state->ddenlovr_dest_layer = 0;
166   state->ddenlovr_blit_flip = 0;
167   state->ddenlovr_blit_x = 0;
168   state->ddenlovr_blit_y = 0;
169   state->ddenlovr_blit_address = 0;
170   state->ddenlovr_blit_pen = 0;
171   state->ddenlovr_blit_pen_mode = 0;
172   state->ddenlovr_blitter_irq_flag = 0;
173   state->ddenlovr_blitter_irq_enable = 0;
174   state->ddenlovr_rect_width = 0;
175   state->ddenlovr_rect_height = 0;
176   state->ddenlovr_line_length = 0;
177   state->ddenlovr_clip_x = 0;
178   state->ddenlovr_clip_y = 0;
179   state->ddenlovr_priority = 0;
180   state->ddenlovr_priority2 = 0;
181   state->ddenlovr_bgcolor = 0;
182   state->ddenlovr_bgcolor2 = 0;
183   state->ddenlovr_blit_latch = 0;
184   state->ddenlovr_blit_regs[0] = 0;
185   state->ddenlovr_blit_regs[1] = 0;
186
187   for (i = 0; i < 8; i++)
188   {
189      state->ddenlovr_palette_base[i] = 0;
190      state->ddenlovr_palette_mask[i] = 0;
191      state->ddenlovr_transparency_pen[i] = 0;
192      state->ddenlovr_transparency_mask[i] = 0;
193   }
194
195   /* register save states */
196   state_save_register_global(machine, state->ddenlovr_dest_layer);
197   state_save_register_global(machine, state->ddenlovr_blit_flip);
198   state_save_register_global(machine, state->ddenlovr_blit_x);
199   state_save_register_global(machine, state->ddenlovr_blit_y);
200   state_save_register_global(machine, state->ddenlovr_blit_address);
201   state_save_register_global(machine, state->ddenlovr_blit_pen);
202   state_save_register_global(machine, state->ddenlovr_blit_pen_mode);
203   state_save_register_global(machine, state->ddenlovr_blitter_irq_flag);
204   state_save_register_global(machine, state->ddenlovr_blitter_irq_enable);
205   state_save_register_global(machine, state->ddenlovr_rect_width);
206   state_save_register_global(machine, state->ddenlovr_rect_height);
207   state_save_register_global(machine, state->ddenlovr_clip_width);
208   state_save_register_global(machine, state->ddenlovr_clip_height);
209   state_save_register_global(machine, state->ddenlovr_line_length);
210   state_save_register_global(machine, state->ddenlovr_clip_ctrl);
211   state_save_register_global(machine, state->ddenlovr_clip_x);
212   state_save_register_global(machine, state->ddenlovr_clip_y);
213   state_save_register_global_array(machine, state->ddenlovr_scroll);
214   state_save_register_global(machine, state->ddenlovr_priority);
215   state_save_register_global(machine, state->ddenlovr_priority2);
216   state_save_register_global(machine, state->ddenlovr_bgcolor);
217   state_save_register_global(machine, state->ddenlovr_bgcolor2);
218   state_save_register_global(machine, state->ddenlovr_layer_enable);
219   state_save_register_global(machine, state->ddenlovr_layer_enable2);
220   state_save_register_global_array(machine, state->ddenlovr_palette_base);
221   state_save_register_global_array(machine, state->ddenlovr_palette_mask);
222   state_save_register_global_array(machine, state->ddenlovr_transparency_pen);
223   state_save_register_global_array(machine, state->ddenlovr_transparency_mask);
224   state_save_register_global(machine, state->ddenlovr_blit_latch);
225   state_save_register_global(machine, state->ddenlovr_blit_pen_mask);
226   state_save_register_global_array(machine, state->ddenlovr_blit_regs);
227
228   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[0], 512 * 512);
229   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[1], 512 * 512);
230   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[2], 512 * 512);
231   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[3], 512 * 512);
232   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[4], 512 * 512);
233   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[5], 512 * 512);
234   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[6], 512 * 512);
235   state_save_register_global_pointer(machine, state->ddenlovr_pixmap[7], 512 * 512);
187236}
188237
189static VIDEO_START(mmpanic)
238static VIDEO_START( mmpanic )
190239{
240   dynax_state *state = (dynax_state *)machine->driver_data;
241
191242   VIDEO_START_CALL(ddenlovr);
192243
193   extra_layers = 1;
244   state->extra_layers = 1;
194245}
195246
196static VIDEO_START(hanakanz)
247static VIDEO_START( hanakanz )
197248{
249   dynax_state *state = (dynax_state *)machine->driver_data;
250
198251   VIDEO_START_CALL(ddenlovr);
199252
200   ddenlovr_blit_rom_bits = 16;
201   ddenlovr_blit_commands = hanakanz_commands;
253   state->ddenlovr_blit_rom_bits = 16;
254   state->ddenlovr_blit_commands = hanakanz_commands;
202255}
203256
204static VIDEO_START(mjflove)
257static VIDEO_START( mjflove )
205258{
259   dynax_state *state = (dynax_state *)machine->driver_data;
260
206261   VIDEO_START_CALL(ddenlovr);
207262
208   ddenlovr_blit_commands = mjflove_commands;
263   state->ddenlovr_blit_commands = mjflove_commands;
209264}
210265
211266static void ddenlovr_flipscreen_w( UINT8 data )
212267{
213   logerror("flipscreen = %02x (%s)\n",data,(data&1)?"off":"on");
268   logerror("flipscreen = %02x (%s)\n", data, (data & 1) ? "off" : "on");
214269}
215270
216static void ddenlovr_blit_flip_w( UINT8 data )
271static void ddenlovr_blit_flip_w( running_machine *machine, UINT8 data )
217272{
218   if ((data ^ ddenlovr_blit_flip) & 0xec)
273   dynax_state *state = (dynax_state *)machine->driver_data;
274
275   if ((data ^ state->ddenlovr_blit_flip) & 0xec)
219276   {
220277#ifdef MAME_DEBUG
221      popmessage("warning ddenlovr_blit_flip = %02x",data);
278      popmessage("warning ddenlovr_blit_flip = %02x", data);
222279#endif
223      logerror("warning ddenlovr_blit_flip = %02x\n",data);
280      logerror("warning ddenlovr_blit_flip = %02x\n", data);
224281   }
225282
226   ddenlovr_blit_flip = data;
283   state->ddenlovr_blit_flip = data;
227284}
228285
229286WRITE8_HANDLER( ddenlovr_bgcolor_w )
230287{
231   ddenlovr_bgcolor = data;
288   dynax_state *state = (dynax_state *)space->machine->driver_data;
289   state->ddenlovr_bgcolor = data;
232290}
233291
234292static WRITE8_HANDLER( ddenlovr_bgcolor2_w )
235293{
236   ddenlovr_bgcolor2 = data;
294   dynax_state *state = (dynax_state *)space->machine->driver_data;
295   state->ddenlovr_bgcolor2 = data;
237296}
238297
239298static WRITE16_HANDLER( ddenlovr16_bgcolor_w )
240299{
241300   if (ACCESSING_BITS_0_7)
242      ddenlovr_bgcolor_w(space,offset,data);
301      ddenlovr_bgcolor_w(space, offset, data);
243302}
244303
245304
246305WRITE8_HANDLER( ddenlovr_priority_w )
247306{
248   ddenlovr_priority = data;
307   dynax_state *state = (dynax_state *)space->machine->driver_data;
308   state->ddenlovr_priority = data;
249309}
250310
251311static WRITE8_HANDLER( ddenlovr_priority2_w )
252312{
253   ddenlovr_priority2 = data;
313   dynax_state *state = (dynax_state *)space->machine->driver_data;
314   state->ddenlovr_priority2 = data;
254315}
255316
256317static WRITE16_HANDLER( ddenlovr16_priority_w )
257318{
258319   if (ACCESSING_BITS_0_7)
259      ddenlovr_priority_w(space,offset,data);
320      ddenlovr_priority_w(space, offset, data);
260321}
261322
262323
263324WRITE8_HANDLER( ddenlovr_layer_enable_w )
264325{
265   ddenlovr_layer_enable = data;
326   dynax_state *state = (dynax_state *)space->machine->driver_data;
327   state->ddenlovr_layer_enable = data;
266328}
267329
268330static WRITE8_HANDLER( ddenlovr_layer_enable2_w )
269331{
270   ddenlovr_layer_enable2 = data;
332   dynax_state *state = (dynax_state *)space->machine->driver_data;
333   state->ddenlovr_layer_enable2 = data;
271334}
272335
273336
274337static WRITE16_HANDLER( ddenlovr16_layer_enable_w )
275338{
276339   if (ACCESSING_BITS_0_7)
277      ddenlovr_layer_enable_w(space,offset,data);
340      ddenlovr_layer_enable_w(space, offset, data);
278341}
279342
280343
281344
282
283static void do_plot(int x,int y,int pen)
345static void do_plot( running_machine *machine, int x, int y, int pen )
284346{
347   dynax_state *state = (dynax_state *)machine->driver_data;
285348   int addr, temp;
286349   int xclip, yclip;
287350
r7640r7641
289352   x &= 0x1ff;
290353
291354   // swap x & y (see hanakanz gal check)
292   if (ddenlovr_blit_flip & 0x10)   {   temp = x;   x = y;   y = temp;   }
355   if (state->ddenlovr_blit_flip & 0x10)   {  temp = x;   x = y;   y = temp;  }
293356
294357   // clipping rectangle (see hanakanz / hkagerou gal check)
295358#if 0
296   xclip   =   (x < ddenlovr_clip_x) || (x > ddenlovr_clip_x+ddenlovr_clip_width);
297   yclip   =   (y < ddenlovr_clip_y) || (y > ddenlovr_clip_y+ddenlovr_clip_height);
359   xclip   =   (x < state->ddenlovr_clip_x) || (x > state->ddenlovr_clip_x + state->ddenlovr_clip_width);
360   yclip   =   (y < state->ddenlovr_clip_y) || (y > state->ddenlovr_clip_y + state->ddenlovr_clip_height);
298361#else
299   xclip   =   (x < ddenlovr_clip_x) || (x > ddenlovr_clip_width);
300   yclip   =   (y < ddenlovr_clip_y) || (y > ddenlovr_clip_height);
362   xclip   =   (x < state->ddenlovr_clip_x) || (x > state->ddenlovr_clip_width);
363   yclip   =   (y < state->ddenlovr_clip_y) || (y > state->ddenlovr_clip_height);
301364#endif
302365
303   if (!(ddenlovr_clip_ctrl & 1) &&  xclip) return;
304   if (!(ddenlovr_clip_ctrl & 2) && !xclip) return;
305   if (!(ddenlovr_clip_ctrl & 4) &&  yclip) return;
306   if (!(ddenlovr_clip_ctrl & 8) && !yclip) return;
366   if (!(state->ddenlovr_clip_ctrl & 1) &&  xclip) return;
367   if (!(state->ddenlovr_clip_ctrl & 2) && !xclip) return;
368   if (!(state->ddenlovr_clip_ctrl & 4) &&  yclip) return;
369   if (!(state->ddenlovr_clip_ctrl & 8) && !yclip) return;
307370
308371   addr = 512 * y + x;
309372
310   if (ddenlovr_dest_layer & 0x0001) ddenlovr_pixmap[0][addr] = pen;
311   if (ddenlovr_dest_layer & 0x0002) ddenlovr_pixmap[1][addr] = pen;
312   if (ddenlovr_dest_layer & 0x0004) ddenlovr_pixmap[2][addr] = pen;
313   if (ddenlovr_dest_layer & 0x0008) ddenlovr_pixmap[3][addr] = pen;
373   if (state->ddenlovr_dest_layer & 0x0001) state->ddenlovr_pixmap[0][addr] = pen;
374   if (state->ddenlovr_dest_layer & 0x0002) state->ddenlovr_pixmap[1][addr] = pen;
375   if (state->ddenlovr_dest_layer & 0x0004) state->ddenlovr_pixmap[2][addr] = pen;
376   if (state->ddenlovr_dest_layer & 0x0008) state->ddenlovr_pixmap[3][addr] = pen;
314377
315   if (!extra_layers)   return;
378   if (!state->extra_layers)   return;
316379
317   if (ddenlovr_dest_layer & 0x0100) ddenlovr_pixmap[4][addr] = pen;
318   if (ddenlovr_dest_layer & 0x0200) ddenlovr_pixmap[5][addr] = pen;
319   if (ddenlovr_dest_layer & 0x0400) ddenlovr_pixmap[6][addr] = pen;
320   if (ddenlovr_dest_layer & 0x0800) ddenlovr_pixmap[7][addr] = pen;
380   if (state->ddenlovr_dest_layer & 0x0100) state->ddenlovr_pixmap[4][addr] = pen;
381   if (state->ddenlovr_dest_layer & 0x0200) state->ddenlovr_pixmap[5][addr] = pen;
382   if (state->ddenlovr_dest_layer & 0x0400) state->ddenlovr_pixmap[6][addr] = pen;
383   if (state->ddenlovr_dest_layer & 0x0800) state->ddenlovr_pixmap[7][addr] = pen;
321384}
322385
323386
324INLINE int fetch_bit(UINT8 *src_data,int src_len,int *bit_addr)
387INLINE int fetch_bit( UINT8 *src_data, int src_len, int *bit_addr )
325388{
326389   int baddr = *bit_addr;
327390
328391   *bit_addr = ((*bit_addr) + 1) & 0x7ffffff;
329392
330   if (baddr/8 >= src_len)
393   if (baddr / 8 >= src_len)
331394   {
332395#ifdef MAME_DEBUG
333      popmessage("GFX ROM OVER %06x",baddr/8);
396      popmessage("GFX ROM OVER %06x", baddr / 8);
334397#endif
335398      return 1;
336399   }
r7640r7641
338401   return (src_data[baddr / 8] >> (7 - (baddr & 7))) & 1;
339402}
340403
341INLINE int fetch_word(UINT8 *src_data,int src_len,int *bit_addr,int word_len)
404INLINE int fetch_word( UINT8 *src_data, int src_len, int *bit_addr, int word_len )
342405{
343406   int res = 0;
344407
345408   while (word_len--)
346409   {
347      res = (res << 1) | fetch_bit(src_data,src_len,bit_addr);
410      res = (res << 1) | fetch_bit(src_data, src_len, bit_addr);
348411   }
349412   return res;
350413}
351414
352415
353416
354INLINE void log_draw_error(int src, int cmd)
417INLINE void log_draw_error( int src, int cmd )
355418{
356419#ifdef MAME_DEBUG
357   popmessage("%06x: warning unknown pixel command %02x",src,cmd);
420   popmessage("%06x: warning unknown pixel command %02x", src, cmd);
358421#endif
359   logerror("%06x: warning unknown pixel command %02x\n",src,cmd);
422   logerror("%06x: warning unknown pixel command %02x\n", src, cmd);
360423}
361424
362425/*  Copy from ROM
r7640r7641
370433    06 blit_pen_mode (replace values stored in ROM)
371434*/
372435
373static int blit_draw(running_machine *machine, int src,int sx)
436static int blit_draw( running_machine *machine, int src, int sx )
374437{
438   dynax_state *state = (dynax_state *)machine->driver_data;
375439   UINT8 *src_data = memory_region(machine, "blitter");
376440   int src_len = memory_region_length(machine, "blitter");
377   int bit_addr = (src & 0xffffff) * ddenlovr_blit_rom_bits;   /* convert to bit address */
441   int bit_addr = (src & 0xffffff) * state->ddenlovr_blit_rom_bits;   /* convert to bit address */
378442   int pen_size, arg_size, cmd;
379443   int x;
380   int xinc = (ddenlovr_blit_flip & 1) ? -1 : 1;
381   int yinc = (ddenlovr_blit_flip & 2) ? -1 : 1;
444   int xinc = (state->ddenlovr_blit_flip & 1) ? -1 : 1;
445   int yinc = (state->ddenlovr_blit_flip & 2) ? -1 : 1;
382446
383   pen_size = fetch_word(src_data,src_len,&bit_addr,4) + 1;
384   arg_size = fetch_word(src_data,src_len,&bit_addr,4) + 1;
447   pen_size = fetch_word(src_data, src_len, &bit_addr, 4) + 1;
448   arg_size = fetch_word(src_data, src_len, &bit_addr, 4) + 1;
385449
386450#ifdef MAME_DEBUG
387451   if (pen_size > 4 || arg_size > 8)
388      popmessage("warning: pen_size %d arg_size %d",pen_size,arg_size);
452      popmessage("warning: pen_size %d arg_size %d", pen_size, arg_size);
389453#endif
390454
391455   // sryudens game bug
r7640r7641
396460
397461   for (;;)
398462   {
399      cmd = fetch_word(src_data,src_len,&bit_addr,3);
400      switch ( ddenlovr_blit_commands[cmd] )
463      cmd = fetch_word(src_data, src_len, &bit_addr, 3);
464      switch (state->ddenlovr_blit_commands[cmd])
401465      {
402466         case BLIT_NEXT:
403467            /* next line */
404            ddenlovr_blit_y += yinc;
468            state->ddenlovr_blit_y += yinc;
405469            x = sx;
406470            break;
407471
408472         case BLIT_LINE:
409473            {
410               int length = fetch_word(src_data,src_len,&bit_addr,arg_size);
411               int pen = fetch_word(src_data,src_len,&bit_addr,pen_size);
412               if (ddenlovr_blit_pen_mode) pen = (ddenlovr_blit_pen & 0x0f);
413               pen |= ddenlovr_blit_pen & 0xf0;
474               int length = fetch_word(src_data, src_len, &bit_addr, arg_size);
475               int pen    = fetch_word(src_data, src_len, &bit_addr, pen_size);
476
477               if (state->ddenlovr_blit_pen_mode)
478                  pen = (state->ddenlovr_blit_pen & 0x0f);
479               pen |= state->ddenlovr_blit_pen & 0xf0;
480
414481               while (length-- >= 0)
415482               {
416                  do_plot(x,ddenlovr_blit_y,pen);
483                  do_plot(machine, x, state->ddenlovr_blit_y, pen);
417484                  x += xinc;
418485               }
419486            }
r7640r7641
421488
422489         case BLIT_COPY:
423490            {
424               int length = fetch_word(src_data,src_len,&bit_addr,arg_size);
491               int length = fetch_word(src_data, src_len, &bit_addr, arg_size);
492
425493               while (length-- >= 0)
426494               {
427                  int pen = fetch_word(src_data,src_len,&bit_addr,pen_size);
428                  if (ddenlovr_blit_pen_mode) pen = (ddenlovr_blit_pen & 0x0f);
429                  pen |= ddenlovr_blit_pen & 0xf0;
430                  do_plot(x,ddenlovr_blit_y,pen);
495                  int pen = fetch_word(src_data, src_len, &bit_addr, pen_size);
496                  if (state->ddenlovr_blit_pen_mode)
497                     pen = (state->ddenlovr_blit_pen & 0x0f);
498                  pen |= state->ddenlovr_blit_pen & 0xf0;
499
500                  do_plot(machine, x, state->ddenlovr_blit_y, pen);
431501                  x += xinc;
432502               }
433503            }
434504            break;
435505
436506         case BLIT_SKIP:
437            x += xinc * fetch_word(src_data,src_len,&bit_addr,arg_size);
507            x += xinc * fetch_word(src_data, src_len, &bit_addr, arg_size);
438508            break;
439509
440510         case BLIT_CHANGE_NUM:
441            arg_size = fetch_word(src_data,src_len,&bit_addr,4) + 1;
511            arg_size = fetch_word(src_data, src_len, &bit_addr, 4) + 1;
442512            break;
443513
444514         case BLIT_CHANGE_PEN:
445            pen_size = fetch_word(src_data,src_len,&bit_addr,3) + 1;
515            pen_size = fetch_word(src_data, src_len, &bit_addr, 3) + 1;
446516            break;
447517
448518         default:
449            log_draw_error(src,cmd);
519            log_draw_error(src, cmd);
450520         // fall through
451521         case BLIT_STOP:
452            return ((bit_addr + ddenlovr_blit_rom_bits - 1) / ddenlovr_blit_rom_bits) & 0xffffff;
522            return ((bit_addr + state->ddenlovr_blit_rom_bits - 1) / state->ddenlovr_blit_rom_bits) & 0xffffff;
453523      }
454524   }
455525}
r7640r7641
458528
459529/*  Draw a simple rectangle
460530*/
461static void blit_rect_xywh(void)
531static void blit_rect_xywh( running_machine *machine )
462532{
463   int x,y;
533   dynax_state *state = (dynax_state *)machine->driver_data;
534   int x, y;
464535
465536#ifdef MAME_DEBUG
466//  if (ddenlovr_clip_ctrl != 0x0f)
467//      popmessage("RECT clipx=%03x clipy=%03x ctrl=%x",ddenlovr_clip_x,ddenlovr_clip_y,ddenlovr_clip_ctrl);
537//  if (state->ddenlovr_clip_ctrl != 0x0f)
538//      popmessage("RECT clipx=%03x clipy=%03x ctrl=%x", state->ddenlovr_clip_x, state->ddenlovr_clip_y, state->ddenlovr_clip_ctrl);
468539#endif
469540
470   for (y = 0; y <= ddenlovr_rect_height; y++)
471      for (x = 0; x <= ddenlovr_rect_width; x++)
472         do_plot( x + ddenlovr_blit_x, y + ddenlovr_blit_y, ddenlovr_blit_pen);
541   for (y = 0; y <= state->ddenlovr_rect_height; y++)
542      for (x = 0; x <= state->ddenlovr_rect_width; x++)
543         do_plot(machine, x + state->ddenlovr_blit_x, y + state->ddenlovr_blit_y, state->ddenlovr_blit_pen);
473544}
474545
475546
r7640r7641
484555    04 blit_pen
485556    0c line_length - always 0?
486557*/
487static void blit_rect_yh(void)
558static void blit_rect_yh( running_machine *machine )
488559{
489   int start = 512 * ddenlovr_blit_y;
490   int length = 512 * (ddenlovr_rect_height+1);
560   dynax_state *state = (dynax_state *)machine->driver_data;
561   int start = 512 * state->ddenlovr_blit_y;
562   int length = 512 * (state->ddenlovr_rect_height + 1);
491563
492564#ifdef MAME_DEBUG
493//  if (ddenlovr_clip_ctrl != 0x0f)
494//      popmessage("UNK8C clipx=%03x clipy=%03x ctrl=%x",ddenlovr_clip_x,ddenlovr_clip_y,ddenlovr_clip_ctrl);
565//  if (state->ddenlovr_clip_ctrl != 0x0f)
566//      popmessage("UNK8C clipx=%03x clipy=%03x ctrl=%x", state->ddenlovr_clip_x, state->ddenlovr_clip_y, state->ddenlovr_clip_ctrl);
495567#endif
496568
497   if (start < 512*512)
569   if (start < 512 * 512)
498570   {
499      if (start + length > 512*512)
500         length = 512*512 - start;
571      if (start + length > 512 * 512)
572         length = 512 * 512 - start;
501573
502      if (ddenlovr_dest_layer & 0x0001) memset(ddenlovr_pixmap[0] + start,ddenlovr_blit_pen,length);
503      if (ddenlovr_dest_layer & 0x0002) memset(ddenlovr_pixmap[1] + start,ddenlovr_blit_pen,length);
504      if (ddenlovr_dest_layer & 0x0004) memset(ddenlovr_pixmap[2] + start,ddenlovr_blit_pen,length);
505      if (ddenlovr_dest_layer & 0x0008) memset(ddenlovr_pixmap[3] + start,ddenlovr_blit_pen,length);
574      if (state->ddenlovr_dest_layer & 0x0001) memset(state->ddenlovr_pixmap[0] + start, state->ddenlovr_blit_pen, length);
575      if (state->ddenlovr_dest_layer & 0x0002) memset(state->ddenlovr_pixmap[1] + start, state->ddenlovr_blit_pen, length);
576      if (state->ddenlovr_dest_layer & 0x0004) memset(state->ddenlovr_pixmap[2] + start, state->ddenlovr_blit_pen, length);
577      if (state->ddenlovr_dest_layer & 0x0008) memset(state->ddenlovr_pixmap[3] + start, state->ddenlovr_blit_pen, length);
506578
507      if (!extra_layers)   return;
579      if (!state->extra_layers)   return;
508580
509      if (ddenlovr_dest_layer & 0x0100) memset(ddenlovr_pixmap[4] + start,ddenlovr_blit_pen,length);
510      if (ddenlovr_dest_layer & 0x0200) memset(ddenlovr_pixmap[5] + start,ddenlovr_blit_pen,length);
511      if (ddenlovr_dest_layer & 0x0400) memset(ddenlovr_pixmap[6] + start,ddenlovr_blit_pen,length);
512      if (ddenlovr_dest_layer & 0x0800) memset(ddenlovr_pixmap[7] + start,ddenlovr_blit_pen,length);
581      if (state->ddenlovr_dest_layer & 0x0100) memset(state->ddenlovr_pixmap[4] + start, state->ddenlovr_blit_pen, length);
582      if (state->ddenlovr_dest_layer & 0x0200) memset(state->ddenlovr_pixmap[5] + start, state->ddenlovr_blit_pen, length);
583      if (state->ddenlovr_dest_layer & 0x0400) memset(state->ddenlovr_pixmap[6] + start, state->ddenlovr_blit_pen, length);
584      if (state->ddenlovr_dest_layer & 0x0800) memset(state->ddenlovr_pixmap[7] + start, state->ddenlovr_blit_pen, length);
513585   }
514586}
515587
r7640r7641
523595    02 Y
524596    04 blit_pen
525597*/
526static void blit_fill_xy(int x, int y)
598static void blit_fill_xy( running_machine *machine, int x, int y )
527599{
600   dynax_state *state = (dynax_state *)machine->driver_data;
528601   int start = 512 * y + x;
529602
530603#ifdef MAME_DEBUG
531604//  if (x || y)
532//      popmessage("FILL command X %03x Y %03x",x,y);
605//      popmessage("FILL command X %03x Y %03x", x, y);
533606#endif
534607
535   if (ddenlovr_dest_layer & 0x0001) memset(ddenlovr_pixmap[0] + start,ddenlovr_blit_pen,512*512 - start);
536   if (ddenlovr_dest_layer & 0x0002) memset(ddenlovr_pixmap[1] + start,ddenlovr_blit_pen,512*512 - start);
537   if (ddenlovr_dest_layer & 0x0004) memset(ddenlovr_pixmap[2] + start,ddenlovr_blit_pen,512*512 - start);
538   if (ddenlovr_dest_layer & 0x0008) memset(ddenlovr_pixmap[3] + start,ddenlovr_blit_pen,512*512 - start);
608   if (state->ddenlovr_dest_layer & 0x0001) memset(state->ddenlovr_pixmap[0] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
609   if (state->ddenlovr_dest_layer & 0x0002) memset(state->ddenlovr_pixmap[1] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
610   if (state->ddenlovr_dest_layer & 0x0004) memset(state->ddenlovr_pixmap[2] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
611   if (state->ddenlovr_dest_layer & 0x0008) memset(state->ddenlovr_pixmap[3] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
539612
540   if (!extra_layers)   return;
613   if (!state->extra_layers)   return;
541614
542   if (ddenlovr_dest_layer & 0x0100) memset(ddenlovr_pixmap[4] + start,ddenlovr_blit_pen,512*512 - start);
543   if (ddenlovr_dest_layer & 0x0200) memset(ddenlovr_pixmap[5] + start,ddenlovr_blit_pen,512*512 - start);
544   if (ddenlovr_dest_layer & 0x0400) memset(ddenlovr_pixmap[6] + start,ddenlovr_blit_pen,512*512 - start);
545   if (ddenlovr_dest_layer & 0x0800) memset(ddenlovr_pixmap[7] + start,ddenlovr_blit_pen,512*512 - start);
615   if (state->ddenlovr_dest_layer & 0x0100) memset(state->ddenlovr_pixmap[4] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
616   if (state->ddenlovr_dest_layer & 0x0200) memset(state->ddenlovr_pixmap[5] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
617   if (state->ddenlovr_dest_layer & 0x0400) memset(state->ddenlovr_pixmap[6] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
618   if (state->ddenlovr_dest_layer & 0x0800) memset(state->ddenlovr_pixmap[7] + start, state->ddenlovr_blit_pen, 512 * 512 - start);
546619}
547620
548621
r7640r7641
557630    04 blit_pen
558631    ddenlovr_blit_x and ddenlovr_blit_y are left pointing to the last pixel at the end of the command
559632*/
560static void blit_horiz_line(void)
633static void blit_horiz_line( running_machine *machine )
561634{
635   dynax_state *state = (dynax_state *)machine->driver_data;
562636   int i;
563637
564638#ifdef MAME_DEBUG
565639   popmessage("LINE X");
566640
567   if (ddenlovr_clip_ctrl != 0x0f)
568      popmessage("LINE X clipx=%03x clipy=%03x ctrl=%x",ddenlovr_clip_x,ddenlovr_clip_y,ddenlovr_clip_ctrl);
641   if (state->ddenlovr_clip_ctrl != 0x0f)
642      popmessage("LINE X clipx=%03x clipy=%03x ctrl=%x", state->ddenlovr_clip_x, state->ddenlovr_clip_y, state->ddenlovr_clip_ctrl);
569643
570   if (ddenlovr_blit_flip)
571      popmessage("LINE X flip=%x",ddenlovr_blit_flip);
644   if (state->ddenlovr_blit_flip)
645      popmessage("LINE X flip=%x", state->ddenlovr_blit_flip);
572646#endif
573647
574   for (i = 0; i <= ddenlovr_line_length; i++)
575      do_plot(ddenlovr_blit_x++,ddenlovr_blit_y,ddenlovr_blit_pen);
648   for (i = 0; i <= state->ddenlovr_line_length; i++)
649      do_plot(machine, state->ddenlovr_blit_x++, state->ddenlovr_blit_y, state->ddenlovr_blit_pen);
576650}
577651
578652
r7640r7641
587661    04 blit_pen
588662    ddenlovr_blit_x and ddenlovr_blit_y are left pointing to the last pixel at the end of the command
589663*/
590static void blit_vert_line(void)
664static void blit_vert_line( running_machine *machine )
591665{
666   dynax_state *state = (dynax_state *)machine->driver_data;
592667   int i;
593668
594669#ifdef MAME_DEBUG
595670   popmessage("LINE Y");
596671
597   if (ddenlovr_clip_ctrl != 0x0f)
598      popmessage("LINE Y clipx=%03x clipy=%03x ctrl=%x",ddenlovr_clip_x,ddenlovr_clip_y,ddenlovr_clip_ctrl);
672   if (state->ddenlovr_clip_ctrl != 0x0f)
673      popmessage("LINE Y clipx=%03x clipy=%03x ctrl=%x", state->ddenlovr_clip_x, state->ddenlovr_clip_y, state->ddenlovr_clip_ctrl);
599674#endif
600675
601   for (i = 0; i <= ddenlovr_line_length; i++)
602      do_plot(ddenlovr_blit_x,ddenlovr_blit_y++,ddenlovr_blit_pen);
676   for (i = 0; i <= state->ddenlovr_line_length; i++)
677      do_plot(machine, state->ddenlovr_blit_x, state->ddenlovr_blit_y++, state->ddenlovr_blit_pen);
603678}
604679
605680
606681
607682
608INLINE void log_blit(running_machine *machine, int data)
683INLINE void log_blit( running_machine *machine, int data )
609684{
685   dynax_state *state = (dynax_state *)machine->driver_data;
686
610687#if 1
611688   logerror("%s: blit src %06x x %03x y %03x flags %02x layer %02x pen %02x penmode %02x w %03x h %03x linelen %03x flip %02x clip: ctrl %x xy %03x %03x wh %03x %03x\n",
612689         cpuexec_describe_context(machine),
613         ddenlovr_blit_address,ddenlovr_blit_x,ddenlovr_blit_y,data,
614         ddenlovr_dest_layer,ddenlovr_blit_pen,ddenlovr_blit_pen_mode,ddenlovr_rect_width,ddenlovr_rect_height,ddenlovr_line_length,ddenlovr_blit_flip,
615         ddenlovr_clip_ctrl,ddenlovr_clip_x,ddenlovr_clip_y, ddenlovr_clip_width,ddenlovr_clip_height   );
690         state->ddenlovr_blit_address, state->ddenlovr_blit_x, state->ddenlovr_blit_y, data,
691         state->ddenlovr_dest_layer, state->ddenlovr_blit_pen, state->ddenlovr_blit_pen_mode, state->ddenlovr_rect_width, state->ddenlovr_rect_height, state->ddenlovr_line_length, state->ddenlovr_blit_flip,
692         state->ddenlovr_clip_ctrl, state->ddenlovr_clip_x, state->ddenlovr_clip_y, state->ddenlovr_clip_width, state->ddenlovr_clip_height);
616693#endif
617694}
618695
619static void blitter_w(const address_space *space, int blitter, offs_t offset,UINT8 data,int irq_vector)
696static void blitter_w( const address_space *space, int blitter, offs_t offset, UINT8 data, int irq_vector )
620697{
621   static int ddenlovr_blit_reg[2];
698   dynax_state *state = (dynax_state *)space->machine->driver_data;
622699   int hi_bits;
623700
624701profiler_mark_start(PROFILER_VIDEO);
625702
626   switch(offset)
703   switch (offset)
627704   {
628705   case 0:
629      ddenlovr_blit_reg[blitter] = data;
706      state->ddenlovr_blit_regs[blitter] = data;
630707      break;
631708
632709   case 1:
633      hi_bits = (ddenlovr_blit_reg[blitter] & 0xc0) << 2;
710      hi_bits = (state->ddenlovr_blit_regs[blitter] & 0xc0) << 2;
634711
635      switch(ddenlovr_blit_reg[blitter] & 0x3f)
712      switch (state->ddenlovr_blit_regs[blitter] & 0x3f)
636713      {
637714      case 0x00:
638         if (blitter)   ddenlovr_dest_layer = (ddenlovr_dest_layer & 0x00ff) | (data<<8);
639         else         ddenlovr_dest_layer = (ddenlovr_dest_layer & 0xff00) | (data<<0);
715         if (blitter)   state->ddenlovr_dest_layer = (state->ddenlovr_dest_layer & 0x00ff) | (data << 8);
716         else         state->ddenlovr_dest_layer = (state->ddenlovr_dest_layer & 0xff00) | (data << 0);
640717         break;
641718
642719      case 0x01:
r7640r7641
644721         break;
645722
646723      case 0x02:
647         ddenlovr_blit_y = data | hi_bits;
724         state->ddenlovr_blit_y = data | hi_bits;
648725         break;
649726
650727      case 0x03:
651         ddenlovr_blit_flip_w(data);
728         ddenlovr_blit_flip_w(space->machine, data);
652729         break;
653730
654731      case 0x04:
655         ddenlovr_blit_pen = data;
732         state->ddenlovr_blit_pen = data;
656733         break;
657734
658735      case 0x05:
659         ddenlovr_blit_pen_mask = data;
736         state->ddenlovr_blit_pen_mask = data;
660737         break;
661738
662739      case 0x06:
663740         // related to pen, can be 0 or 1 for 0x10 blitter command
664741         // 0 = only bits 7-4 of ddenlovr_blit_pen contain data
665742         // 1 = bits 3-0 contain data as well
666         ddenlovr_blit_pen_mode = data;
743         state->ddenlovr_blit_pen_mode = data;
667744         break;
668745
669746      case 0x0a:
670         ddenlovr_rect_width = data | hi_bits;
747         state->ddenlovr_rect_width = data | hi_bits;
671748         break;
672749
673750      case 0x0b:
674         ddenlovr_rect_height = data | hi_bits;
751         state->ddenlovr_rect_height = data | hi_bits;
675752         break;
676753
677754      case 0x0c:
678         ddenlovr_line_length = data | hi_bits;
755         state->ddenlovr_line_length = data | hi_bits;
679756         break;
680757
681758      case 0x0d:
682         ddenlovr_blit_address = (ddenlovr_blit_address & 0xffff00) | (data <<0);
759         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0xffff00) | (data <<0);
683760         break;
684761      case 0x0e:
685         ddenlovr_blit_address = (ddenlovr_blit_address & 0xff00ff) | (data <<8);
762         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0xff00ff) | (data <<8);
686763         break;
687764      case 0x0f:
688         ddenlovr_blit_address = (ddenlovr_blit_address & 0x00ffff) | (data<<16);
765         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0x00ffff) | (data<<16);
689766         break;
690767
691768      case 0x14:
692         ddenlovr_blit_x = data | hi_bits;
769         state->ddenlovr_blit_x = data | hi_bits;
693770         break;
694771
695772      case 0x16:
696         ddenlovr_clip_x = data | hi_bits;
773         state->ddenlovr_clip_x = data | hi_bits;
697774         break;
698775
699776      case 0x17:
700         ddenlovr_clip_y = data | hi_bits;
777         state->ddenlovr_clip_y = data | hi_bits;
701778         break;
702779
703780      case 0x18:
r7640r7641
708785      case 0x1d:
709786      case 0x1e:
710787      case 0x1f:
711         ddenlovr_scroll[blitter*8 + (ddenlovr_blit_reg[blitter] & 7)] = data | hi_bits;
788         state->ddenlovr_scroll[blitter * 8 + (state->ddenlovr_blit_regs[blitter] & 7)] = data | hi_bits;
712789         break;
713790
714791      case 0x20:
715         ddenlovr_clip_ctrl = data;
792         state->ddenlovr_clip_ctrl = data;
716793         break;
717794
718795      case 0x24:
r7640r7641
721798
722799         switch (data)
723800         {
724            case 0x04:   blit_fill_xy(0, 0);
801            case 0x04:   blit_fill_xy(space->machine, 0, 0);
725802                     break;
726            case 0x14:   blit_fill_xy(ddenlovr_blit_x, ddenlovr_blit_y);
803            case 0x14:   blit_fill_xy(space->machine, state->ddenlovr_blit_x, state->ddenlovr_blit_y);
727804                     break;
728805
729            case 0x10:   ddenlovr_blit_address = blit_draw(space->machine,ddenlovr_blit_address,ddenlovr_blit_x);
806            case 0x10:   state->ddenlovr_blit_address = blit_draw(space->machine, state->ddenlovr_blit_address, state->ddenlovr_blit_x);
730807                     break;
731808
732            case 0x13:   blit_horiz_line();
809            case 0x13:   blit_horiz_line(space->machine);
733810                     break;
734            case 0x1b:   blit_vert_line();
811            case 0x1b:   blit_vert_line(space->machine);
735812                     break;
736813
737            case 0x1c:   blit_rect_xywh();
814            case 0x1c:   blit_rect_xywh(space->machine);
738815                     break;
739816
740817            // These two are issued one after the other (43 then 8c)
741818            // 8c is issued immediately after 43 has finished, without
742819            // changing any argument
743820            case 0x43:   break;
744            case 0x8c:   blit_rect_yh();
821            case 0x8c:   blit_rect_yh(space->machine);
745822                     break;
746823
747824            default:
748825                     ;
749826            #ifdef MAME_DEBUG
750               popmessage("unknown blitter command %02x",data);
827               popmessage("unknown blitter command %02x", data);
751828               logerror("%06x: unknown blitter command %02x\n", cpu_get_pc(space->cpu), data);
752829            #endif
753830         }
r7640r7641
758835         else
759836         {
760837            /* ddenlovr */
761            if (ddenlovr_blitter_irq_enable)
838            if (state->ddenlovr_blitter_irq_enable)
762839            {
763               ddenlovr_blitter_irq_flag = 1;
764               cpu_set_input_line(space->cpu,1,HOLD_LINE);
840               state->ddenlovr_blitter_irq_flag = 1;
841               cpu_set_input_line(space->cpu, 1, HOLD_LINE);
765842            }
766843         }
767844         break;
768845
769846      default:
770         logerror("%06x: Blitter %d reg %02x = %02x\n", cpu_get_pc(space->cpu), blitter, ddenlovr_blit_reg[blitter], data);
847         logerror("%06x: Blitter %d reg %02x = %02x\n", cpu_get_pc(space->cpu), blitter, state->ddenlovr_blit_regs[blitter], data);
771848         break;
772849      }
773850   }
r7640r7641
779856
780857
781858// differences wrt blitter_data_w: slightly different blitter commands
782static void blitter_w_funkyfig(running_machine *machine, int blitter, offs_t offset,UINT8 data,int irq_vector)
859static void blitter_w_funkyfig( running_machine *machine, int blitter, offs_t offset, UINT8 data, int irq_vector )
783860{
784   static int ddenlovr_blit_reg[2];
861   dynax_state *state = (dynax_state *)machine->driver_data;
785862   int hi_bits;
786863
787864profiler_mark_start(PROFILER_VIDEO);
r7640r7641
789866   switch(offset)
790867   {
791868   case 0:
792      ddenlovr_blit_reg[blitter] = data;
869      state->ddenlovr_blit_regs[blitter] = data;
793870      break;
794871
795872   case 1:
796      hi_bits = (ddenlovr_blit_reg[blitter] & 0xc0) << 2;
873      hi_bits = (state->ddenlovr_blit_regs[blitter] & 0xc0) << 2;
797874
798      switch(ddenlovr_blit_reg[blitter] & 0x3f)
875      switch (state->ddenlovr_blit_regs[blitter] & 0x3f)
799876      {
800877      case 0x00:
801         if (blitter)   ddenlovr_dest_layer = (ddenlovr_dest_layer & 0x00ff) | (data<<8);
802         else         ddenlovr_dest_layer = (ddenlovr_dest_layer & 0xff00) | (data<<0);
878         if (blitter)   state->ddenlovr_dest_layer = (state->ddenlovr_dest_layer & 0x00ff) | (data << 8);
879         else         state->ddenlovr_dest_layer = (state->ddenlovr_dest_layer & 0xff00) | (data << 0);
803880         break;
804881
805882      case 0x01:
r7640r7641
807884         break;
808885
809886      case 0x02:
810         ddenlovr_blit_y = data | hi_bits;
887         state->ddenlovr_blit_y = data | hi_bits;
811888         break;
812889
813890      case 0x03:
814         ddenlovr_blit_flip_w(data);
891         ddenlovr_blit_flip_w(machine, data);
815892         break;
816893
817894      case 0x04:
818         ddenlovr_blit_pen = data;
895         state->ddenlovr_blit_pen = data;
819896         break;
820897
821898      case 0x05:
822         ddenlovr_blit_pen_mask = data;
899         state->ddenlovr_blit_pen_mask = data;
823900         break;
824901
825902      case 0x06:
826903         // related to pen, can be 0 or 1 for 0x10 blitter command
827904         // 0 = only bits 7-4 of ddenlovr_blit_pen contain data
828905         // 1 = bits 3-0 contain data as well
829         ddenlovr_blit_pen_mode = data;
906         state->ddenlovr_blit_pen_mode = data;
830907         break;
831908
832909      case 0x0a:
833         ddenlovr_rect_width = data | hi_bits;
910         state->ddenlovr_rect_width = data | hi_bits;
834911         break;
835912
836913      case 0x0b:
837         ddenlovr_rect_height = data | hi_bits;
914         state->ddenlovr_rect_height = data | hi_bits;
838915         break;
839916
840917      case 0x0c:
841         ddenlovr_line_length = data | hi_bits;
918         state->ddenlovr_line_length = data | hi_bits;
842919         break;
843920
844921      case 0x0d:
845         ddenlovr_blit_address = (ddenlovr_blit_address & 0xffff00) | (data <<0);
922         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0xffff00) | (data <<  0);
846923         break;
847924      case 0x0e:
848         ddenlovr_blit_address = (ddenlovr_blit_address & 0xff00ff) | (data <<8);
925         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0xff00ff) | (data <<  8);
849926         break;
850927      case 0x0f:
851         ddenlovr_blit_address = (ddenlovr_blit_address & 0x00ffff) | (data<<16);
928         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0x00ffff) | (data << 16);
852929         break;
853930
854931      case 0x14:
855         ddenlovr_blit_x = data | hi_bits;
932         state->ddenlovr_blit_x = data | hi_bits;
856933         break;
857934
858935      case 0x16:
859         ddenlovr_clip_x = data | hi_bits;
936         state->ddenlovr_clip_x = data | hi_bits;
860937         break;
861938
862939      case 0x17:
863         ddenlovr_clip_y = data | hi_bits;
940         state->ddenlovr_clip_y = data | hi_bits;
864941         break;
865942
866943      case 0x18:
r7640r7641
871948      case 0x1d:
872949      case 0x1e:
873950      case 0x1f:
874         ddenlovr_scroll[blitter*8 + (ddenlovr_blit_reg[blitter] & 7)] = data | hi_bits;
951         state->ddenlovr_scroll[blitter * 8 + (state->ddenlovr_blit_regs[blitter] & 7)] = data | hi_bits;
875952         break;
876953
877954      case 0x20:
878         ddenlovr_clip_ctrl = data;
955         state->ddenlovr_clip_ctrl = data;
879956         break;
880957
881958      case 0x24:
r7640r7641
886963         {
887964
888965            case 0x84:   // same as 04?
889            case 0x04:   blit_fill_xy(0, 0);
966            case 0x04:   blit_fill_xy(machine, 0, 0);
890967                     break;
891968
892969//              unused?
893//              case 0x14:  blit_fill_xy(ddenlovr_blit_x, ddenlovr_blit_y);
970//              case 0x14:  blit_fill_xy(machine, state->ddenlovr_blit_x, state->ddenlovr_blit_y);
894971//                          break;
895972
896            case 0x00/*0x10*/:   ddenlovr_blit_address = blit_draw(machine,ddenlovr_blit_address,ddenlovr_blit_x);
973            case 0x00/*0x10*/:   state->ddenlovr_blit_address = blit_draw(machine, state->ddenlovr_blit_address, state->ddenlovr_blit_x);
897974                     break;
898975
899976            case 0x0b:   // same as 03? see the drawing of the R in "cRoss hatch" (key test)
900            case 0x03/*0x13*/:   blit_horiz_line();
977            case 0x03/*0x13*/:   blit_horiz_line(machine);
901978                     break;
902979//              unused?
903//              case 0x1b:  blit_vert_line();
980//              case 0x1b:  blit_vert_line(machine);
904981//                          break;
905982
906            case 0x0c/*0x1c*/:   blit_rect_xywh();
983            case 0x0c/*0x1c*/:   blit_rect_xywh(machine);
907984                     break;
908985
909986            // These two are issued one after the other (43 then 8c)
910987            // 8c is issued immediately after 43 has finished, without
911988            // changing any argument
912989            case 0x43:   break;
913            case 0x8c:   blit_rect_yh();
990            case 0x8c:   blit_rect_yh(machine);
914991                     break;
915992
916993            default:
917994                     ;
918995            #ifdef MAME_DEBUG
919               popmessage("unknown blitter command %02x",data);
996               popmessage("unknown blitter command %02x", data);
920997               logerror("%s: unknown blitter command %02x\n", cpuexec_describe_context(machine), data);
921998            #endif
922999         }
9231000
924         cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, irq_vector);
1001         cpu_set_input_line_and_vector(state->maincpu, 0, HOLD_LINE, irq_vector);
9251002         break;
9261003
9271004      default:
928         logerror("%s: Blitter %d reg %02x = %02x\n", cpuexec_describe_context(machine), blitter, ddenlovr_blit_reg[blitter], data);
1005         logerror("%s: Blitter %d reg %02x = %02x\n", cpuexec_describe_context(machine), blitter, state->ddenlovr_blit_regs[blitter], data);
9291006         break;
9301007      }
9311008   }
r7640r7641
9381015
9391016static WRITE8_HANDLER( hanakanz_blitter_reg_w )
9401017{
941   ddenlovr_blit_reg = data;
1018   dynax_state *state = (dynax_state *)space->machine->driver_data;
1019   state->ddenlovr_blit_latch = data;
9421020}
9431021
9441022// differences wrt blitter_data_w: registers are shuffled around, hi_bits in the low bits, clip_w/h, includes layers registers
9451023static WRITE8_HANDLER( hanakanz_blitter_data_w )
9461024{
1025   dynax_state *state = (dynax_state *)space->machine->driver_data;
9471026   int hi_bits;
9481027
9491028profiler_mark_start(PROFILER_VIDEO);
9501029
951   hi_bits = (ddenlovr_blit_reg & 0x03) << 8;
1030   hi_bits = (state->ddenlovr_blit_latch & 0x03) << 8;
9521031
953   switch(ddenlovr_blit_reg & 0xfe)
1032   switch (state->ddenlovr_blit_latch & 0xfe)
9541033   {
9551034      case 0x00:
956         ddenlovr_dest_layer = data;
1035         state->ddenlovr_dest_layer = data;
9571036         break;
9581037
9591038      case 0x04:
r7640r7641
9611040         break;
9621041
9631042      case 0x08:
964         ddenlovr_blit_y = data | hi_bits;
1043         state->ddenlovr_blit_y = data | hi_bits;
9651044         break;
9661045
9671046      case 0x0c:
968         ddenlovr_blit_flip_w(data);
1047         ddenlovr_blit_flip_w(space->machine, data);
9691048         break;
9701049
9711050      case 0x10:
972         ddenlovr_blit_pen = data;
1051         state->ddenlovr_blit_pen = data;
9731052         break;
9741053
9751054      case 0x14:
976         ddenlovr_blit_pen_mask = data;
1055         state->ddenlovr_blit_pen_mask = data;
9771056         break;
9781057
9791058      case 0x18:
9801059         // related to pen, can be 0 or 1 for 0x10 blitter command
9811060         // 0 = only bits 7-4 of ddenlovr_blit_pen contain data
9821061         // 1 = bits 3-0 contain data as well
983         ddenlovr_blit_pen_mode = data;
1062         state->ddenlovr_blit_pen_mode = data;
9841063         break;
9851064
9861065      case 0x28:
987         ddenlovr_rect_width = data | hi_bits;
1066         state->ddenlovr_rect_width = data | hi_bits;
9881067         break;
9891068
9901069      case 0x2c:
991         ddenlovr_rect_height = data | hi_bits;
1070         state->ddenlovr_rect_height = data | hi_bits;
9921071         break;
9931072
9941073      case 0x30:
995         ddenlovr_line_length = data | hi_bits;
1074         state->ddenlovr_line_length = data | hi_bits;
9961075         break;
9971076
9981077      case 0x34:
999         ddenlovr_blit_address = (ddenlovr_blit_address & 0xffff00) | (data <<0);
1078         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0xffff00) | (data <<  0);
10001079         break;
10011080      case 0x38:
1002         ddenlovr_blit_address = (ddenlovr_blit_address & 0xff00ff) | (data <<8);
1081         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0xff00ff) | (data <<  8);
10031082         break;
10041083      case 0x3c:
1005         ddenlovr_blit_address = (ddenlovr_blit_address & 0x00ffff) | (data<<16);
1084         state->ddenlovr_blit_address = (state->ddenlovr_blit_address & 0x00ffff) | (data << 16);
10061085         break;
10071086
10081087      case 0x50:
1009         ddenlovr_blit_x = data | hi_bits;
1088         state->ddenlovr_blit_x = data | hi_bits;
10101089         break;
10111090
10121091      case 0x58:
1013         ddenlovr_clip_x = data | hi_bits;
1092         state->ddenlovr_clip_x = data | hi_bits;
10141093         break;
10151094
10161095      case 0x5c:
1017         ddenlovr_clip_y = data | hi_bits;
1096         state->ddenlovr_clip_y = data | hi_bits;
10181097         break;
10191098
10201099      case 0x60:
r7640r7641
10251104      case 0x74:
10261105      case 0x78:
10271106      case 0x7c:
1028         ddenlovr_scroll[(ddenlovr_blit_reg & 0x1c) >> 2] = data | hi_bits;
1107         state->ddenlovr_scroll[(state->ddenlovr_blit_latch & 0x1c) >> 2] = data | hi_bits;
10291108         break;
10301109
10311110      case 0x80:
1032         ddenlovr_clip_ctrl = data;
1111         state->ddenlovr_clip_ctrl = data;
10331112         break;
10341113
10351114      case 0x88:
10361115      case 0x8a:   // can be 3ff
1037         ddenlovr_clip_height = data | hi_bits;
1116         state->ddenlovr_clip_height = data | hi_bits;
10381117         break;
10391118
10401119      case 0x8c:
10411120      case 0x8e:   // can be 3ff
1042         ddenlovr_clip_width = data | hi_bits;
1121         state->ddenlovr_clip_width = data | hi_bits;
10431122         break;
10441123
10451124      case 0xc0:
10461125      case 0xc2:
10471126      case 0xc4:
10481127      case 0xc6:
1049         ddenlovr_palette_base[(ddenlovr_blit_reg >> 1) & 3] = data | (hi_bits & 0x100);
1128         state->ddenlovr_palette_base[(state->ddenlovr_blit_latch >> 1) & 3] = data | (hi_bits & 0x100);
10501129         break;
10511130
10521131      case 0xc8:
10531132      case 0xca:
10541133      case 0xcc:
10551134      case 0xce:
1056         ddenlovr_palette_mask[(ddenlovr_blit_reg >> 1) & 3] = data;
1135         state->ddenlovr_palette_mask[(state->ddenlovr_blit_latch >> 1) & 3] = data;
10571136         break;
10581137
10591138      case 0xd0:
10601139      case 0xd2:
10611140      case 0xd4:
10621141      case 0xd6:
1063         ddenlovr_transparency_pen[(ddenlovr_blit_reg >> 1) & 3] = data;
1142         state->ddenlovr_transparency_pen[(state->ddenlovr_blit_latch >> 1) & 3] = data;
10641143         break;
10651144
10661145      case 0xd8:
10671146      case 0xda:
10681147      case 0xdc:
10691148      case 0xde:
1070         ddenlovr_transparency_mask[(ddenlovr_blit_reg >> 1) & 3] = data;
1149         state->ddenlovr_transparency_mask[(state->ddenlovr_blit_latch >> 1) & 3] = data;
10711150         break;
10721151
10731152      case 0xe4:
1074         ddenlovr_priority_w(space,0,data);
1153         ddenlovr_priority_w(space, 0, data);
10751154         break;
10761155
10771156      case 0xe6:
1078         ddenlovr_layer_enable_w(space,0,data);
1157         ddenlovr_layer_enable_w(space, 0, data);
10791158         break;
10801159
10811160      case 0xe8:
1082         ddenlovr_bgcolor = data | hi_bits;
1161         state->ddenlovr_bgcolor = data | hi_bits;
10831162         break;
10841163
10851164      case 0x90:
r7640r7641
10881167
10891168         switch (data)
10901169         {
1091            case 0x04:   blit_fill_xy(0, 0);
1170            case 0x04:   blit_fill_xy(space->machine, 0, 0);
10921171                     break;
1093            case 0x14:   blit_fill_xy(ddenlovr_blit_x, ddenlovr_blit_y);
1172            case 0x14:   blit_fill_xy(space->machine, state->ddenlovr_blit_x, state->ddenlovr_blit_y);
10941173                     break;
10951174
1096            case 0x10:   ddenlovr_blit_address = blit_draw(space->machine,ddenlovr_blit_address,ddenlovr_blit_x);
1175            case 0x10:   state->ddenlovr_blit_address = blit_draw(space->machine, state->ddenlovr_blit_address, state->ddenlovr_blit_x);
10971176                     break;
10981177
1099            case 0x13:   blit_horiz_line();
1178            case 0x13:   blit_horiz_line(space->machine);
11001179                     break;
1101            case 0x1b:   blit_vert_line();
1180            case 0x1b:   blit_vert_line(space->machine);
11021181                     break;
11031182
1104            case 0x1c:   blit_rect_xywh();
1183            case 0x1c:   blit_rect_xywh(space->machine);
11051184                     break;
11061185
11071186            // These two are issued one after the other (43 then 8c)
11081187            // 8c is issued immediately after 43 has finished, without
11091188            // changing any argument
11101189            case 0x43:   break;
1111            case 0x8c:   blit_rect_yh();
1190            case 0x8c:   blit_rect_yh(space->machine);
11121191                     break;
11131192
11141193            default:
11151194                     ;
11161195            #ifdef MAME_DEBUG
1117               popmessage("unknown blitter command %02x",data);
1196               popmessage("unknown blitter command %02x", data);
11181197               logerror("%06x: unknown blitter command %02x\n", cpu_get_pc(space->cpu), data);
11191198            #endif
11201199         }
r7640r7641
11241203         break;
11251204
11261205      default:
1127         logerror("%06x: Blitter 0 reg %02x = %02x\n", cpu_get_pc(space->cpu), ddenlovr_blit_reg, data);
1206         logerror("%06x: Blitter 0 reg %02x = %02x\n", cpu_get_pc(space->cpu), state->ddenlovr_blit_latch, data);
11281207         break;
11291208   }
11301209
r7640r7641
11341213
11351214static WRITE8_HANDLER( rongrong_blitter_w )
11361215{
1137   blitter_w(space, 0,offset,data,0xf8);
1216   blitter_w(space, 0, offset, data, 0xf8);
11381217}
11391218
11401219static WRITE16_HANDLER( ddenlovr_blitter_w )
11411220{
11421221   if (ACCESSING_BITS_0_7)
1143      blitter_w(space, 0,offset,data & 0xff,0);
1222      blitter_w(space, 0, offset, data & 0xff, 0);
11441223}
11451224
11461225
11471226static WRITE16_HANDLER( ddenlovr_blitter_irq_ack_w )
11481227{
1228   dynax_state *state = (dynax_state *)space->machine->driver_data;
1229
11491230   if (ACCESSING_BITS_0_7)
11501231   {
11511232      if (data & 1)
11521233      {
1153         ddenlovr_blitter_irq_enable = 1;
1234         state->ddenlovr_blitter_irq_enable = 1;
11541235      }
11551236      else
11561237      {
1157         ddenlovr_blitter_irq_enable = 0;
1158         ddenlovr_blitter_irq_flag = 0;
1238         state->ddenlovr_blitter_irq_enable = 0;
1239         state->ddenlovr_blitter_irq_flag = 0;
11591240      }
11601241   }
11611242}
r7640r7641
11631244
11641245static READ8_HANDLER( rongrong_gfxrom_r )
11651246{
1166   UINT8 *rom   =   memory_region( space->machine, "blitter" );
1167   size_t size   =   memory_region_length( space->machine, "blitter" );
1168   int address   =   ddenlovr_blit_address;
1247   dynax_state *state = (dynax_state *)space->machine->driver_data;
1248   UINT8 *rom  = memory_region(space->machine, "blitter");
1249   size_t size = memory_region_length(space->machine, "blitter");
1250   int address = state->ddenlovr_blit_address;
11691251
11701252   if (address >= size)
11711253   {
r7640r7641
11731255      address %= size;
11741256   }
11751257
1176   ddenlovr_blit_address = (ddenlovr_blit_address + 1) & 0xffffff;
1258   state->ddenlovr_blit_address = (state->ddenlovr_blit_address + 1) & 0xffffff;
11771259
11781260   return rom[address];
11791261}
r7640r7641
11841266}
11851267
11861268
1187
1188static void copylayer(bitmap_t *bitmap,const rectangle *cliprect,int layer)
1269static void copylayer(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int layer )
11891270{
1271   dynax_state *state = (dynax_state *)machine->driver_data;
11901272   int x,y;
1191   int scrollx = ddenlovr_scroll[layer/4*8 + (layer%4) + 0];
1192   int scrolly = ddenlovr_scroll[layer/4*8 + (layer%4) + 4];
1273   int scrollx = state->ddenlovr_scroll[layer / 4 * 8 + (layer % 4) + 0];
1274   int scrolly = state->ddenlovr_scroll[layer / 4 * 8 + (layer % 4) + 4];
11931275
1194   int palbase = ddenlovr_palette_base[layer];
1195   int penmask = ddenlovr_palette_mask[layer];
1276   int palbase = state->ddenlovr_palette_base[layer];
1277   int penmask = state->ddenlovr_palette_mask[layer];
11961278
1197   int transpen = ddenlovr_transparency_pen[layer];
1198   int transmask = ddenlovr_transparency_mask[layer];
1279   int transpen = state->ddenlovr_transparency_pen[layer];
1280   int transmask = state->ddenlovr_transparency_mask[layer];
11991281
1200   palbase      &=   ~penmask;
1201   transpen   &=   transmask;
1282   palbase  &= ~penmask;
1283   transpen &= transmask;
12021284
1203   if (((ddenlovr_layer_enable2 << 4) | ddenlovr_layer_enable) & (1 << layer))
1285   if (((state->ddenlovr_layer_enable2 << 4) | state->ddenlovr_layer_enable) & (1 << layer))
12041286   {
1205      for (y = cliprect->min_y;y <= cliprect->max_y;y++)
1287      for (y = cliprect->min_y; y <= cliprect->max_y; y++)
12061288      {
1207         for (x = cliprect->min_x;x <= cliprect->max_x;x++)
1289         for (x = cliprect->min_x; x <= cliprect->max_x; x++)
12081290         {
1209            int pen = ddenlovr_pixmap[layer][512 * ((y + scrolly) & 0x1ff) + ((x + scrollx) & 0x1ff)];
1210            if ( (pen & transmask) != transpen )
1291            int pen = state->ddenlovr_pixmap[layer][512 * ((y + scrolly) & 0x1ff) + ((x + scrollx) & 0x1ff)];
1292            if ((pen & transmask) != transpen)
12111293            {
12121294               pen &= penmask;
12131295               pen |= palbase;
r7640r7641
12201302
12211303VIDEO_UPDATE(ddenlovr)
12221304{
1305   dynax_state *state = (dynax_state *)screen->machine->driver_data;
1306
12231307   static const int order[24][4] =
12241308   {
12251309      { 3,2,1,0 }, { 2,3,1,0 }, { 3,1,2,0 }, { 1,3,2,0 }, { 2,1,3,0 }, { 1,2,3,0 },
r7640r7641
12301314
12311315   int pri;
12321316
1233   int enab = ddenlovr_layer_enable;
1234   int enab2 = ddenlovr_layer_enable2;
1317   int enab = state->ddenlovr_layer_enable;
1318   int enab2 = state->ddenlovr_layer_enable2;
12351319
12361320#if 0
12371321   static int base = 0x0;
12381322   const UINT8 *gfx = memory_region(screen->machine, "blitter");
12391323   int next;
1240   memset(ddenlovr_pixmap[0],0,512*512);
1241   memset(ddenlovr_pixmap[1],0,512*512);
1242   memset(ddenlovr_pixmap[2],0,512*512);
1243   memset(ddenlovr_pixmap[3],0,512*512);
1244   ddenlovr_dest_layer = 8;
1245   ddenlovr_blit_pen = 0;
1246   ddenlovr_blit_pen_mode = 0;
1247   ddenlovr_blit_y = 5;
1248   ddenlovr_clip_ctrl = 0x0f;
1249   next = blit_draw(screen->machine,base,0);
1250   popmessage("GFX %06x",base);
1324   memset(state->ddenlovr_pixmap[0], 0, 512 * 512);
1325   memset(state->ddenlovr_pixmap[1], 0, 512 * 512);
1326   memset(state->ddenlovr_pixmap[2], 0, 512 * 512);
1327   memset(state->ddenlovr_pixmap[3], 0, 512 * 512);
1328   state->ddenlovr_dest_layer = 8;
1329   state->ddenlovr_blit_pen = 0;
1330   state->ddenlovr_blit_pen_mode = 0;
1331   state->ddenlovr_blit_y = 5;
1332   state->ddenlovr_clip_ctrl = 0x0f;
1333   next = blit_draw(screen->machine, base, 0);
1334   popmessage("GFX %06x", base);
12511335   if (input_code_pressed(screen->machine, KEYCODE_S)) base = next;
12521336   if (input_code_pressed_once(screen->machine, KEYCODE_X)) base = next;
12531337   if (input_code_pressed(screen->machine, KEYCODE_C)) { base--; while ((gfx[base] & 0xf0) != 0x30) base--; }
r7640r7641
12561340   if (input_code_pressed_once(screen->machine, KEYCODE_F)) { base++; while ((gfx[base] & 0xf0) != 0x30) base++; }
12571341#endif
12581342
1259   bitmap_fill(bitmap,cliprect,ddenlovr_bgcolor);
1343   bitmap_fill(bitmap, cliprect, state->ddenlovr_bgcolor);
12601344
12611345#ifdef MAME_DEBUG
12621346   if (input_code_pressed(screen->machine, KEYCODE_Z))
12631347   {
1264      int mask,mask2;
1348      int mask, mask2;
12651349
12661350      mask = 0;
12671351
r7640r7641
12721356
12731357      mask2 = 0;
12741358
1275      if (extra_layers)
1359      if (state->extra_layers)
12761360      {
12771361         if (input_code_pressed(screen->machine, KEYCODE_A))   mask2 |= 1;
12781362         if (input_code_pressed(screen->machine, KEYCODE_S))   mask2 |= 2;
r7640r7641
12821366
12831367      if (mask || mask2)
12841368      {
1285         ddenlovr_layer_enable &= mask;
1286         ddenlovr_layer_enable2 &= mask2;
1369         state->ddenlovr_layer_enable &= mask;
1370         state->ddenlovr_layer_enable2 &= mask2;
12871371      }
12881372   }
12891373#endif
12901374
1291   pri = ddenlovr_priority;
1375   pri = state->ddenlovr_priority;
12921376
1293      if (pri >= 24)
1294      {
1295         popmessage("priority = %02x",pri);
1296         pri = 0;
1297      }
1377   if (pri >= 24)
1378   {
1379      popmessage("priority = %02x", pri);
1380      pri = 0;
1381   }
12981382
1299      copylayer(bitmap,cliprect,order[pri][0]);
1300      copylayer(bitmap,cliprect,order[pri][1]);
1301      copylayer(bitmap,cliprect,order[pri][2]);
1302      copylayer(bitmap,cliprect,order[pri][3]);
1383   copylayer(screen->machine, bitmap, cliprect, order[pri][0]);
1384   copylayer(screen->machine, bitmap, cliprect, order[pri][1]);
1385   copylayer(screen->machine, bitmap, cliprect, order[pri][2]);
1386   copylayer(screen->machine, bitmap, cliprect, order[pri][3]);
13031387
1304   if (extra_layers)
1388   if (state->extra_layers)
13051389   {
1306      pri = ddenlovr_priority2;
1390      pri = state->ddenlovr_priority2;
13071391
13081392      if (pri >= 24)
13091393      {
1310         popmessage("priority2 = %02x",pri);
1394         popmessage("priority2 = %02x", pri);
13111395         pri = 0;
13121396      }
13131397
1314      copylayer(bitmap,cliprect,order[pri][0]+4);
1315      copylayer(bitmap,cliprect,order[pri][1]+4);
1316      copylayer(bitmap,cliprect,order[pri][2]+4);
1317      copylayer(bitmap,cliprect,order[pri][3]+4);
1398      copylayer(screen->machine, bitmap, cliprect, order[pri][0] + 4);
1399      copylayer(screen->machine, bitmap, cliprect, order[pri][1] + 4);
1400      copylayer(screen->machine, bitmap, cliprect, order[pri][2] + 4);
1401      copylayer(screen->machine, bitmap, cliprect, order[pri][3] + 4);
13181402   }
13191403
1320   ddenlovr_layer_enable = enab;
1321   ddenlovr_layer_enable2 = enab2;
1404   state->ddenlovr_layer_enable = enab;
1405   state->ddenlovr_layer_enable2 = enab2;
13221406
13231407   return 0;
13241408}
13251409
13261410static CUSTOM_INPUT( ddenlovr_special_r )
13271411{
1328   return ddenlovr_blitter_irq_flag;
1412   dynax_state *state = (dynax_state *)field->port->machine->driver_data;
1413   return state->ddenlovr_blitter_irq_flag;
13291414}
13301415
13311416static WRITE16_HANDLER( ddenlovr_coincounter_0_w )
r7640r7641
13401425}
13411426
13421427
1343static UINT8 palram[0x200];
1344
13451428static WRITE8_HANDLER( rongrong_palette_w )
13461429{
1347   int r,g,b,d1,d2,indx;
1430   dynax_state *state = (dynax_state *)space->machine->driver_data;
1431   int r, g, b, d1, d2, indx;
13481432
1349   palram[offset] = data;
1433   state->palram[offset] = data;
13501434
13511435   indx = ((offset & 0x1e0) >> 1) | (offset & 0x00f);
1352   d1 = palram[offset & ~0x10];
1353   d2 = palram[offset |  0x10];
1436   d1 = state->palram[offset & ~0x10];
1437   d2 = state->palram[offset |  0x10];
13541438
13551439   r = d1 & 0x1f;
13561440   g = d2 & 0x1f;
13571441   /* what were they smoking??? */
13581442   b = ((d1 & 0xe0) >> 5) | (d2 & 0xc0) >> 3;
13591443
1360   palette_set_color_rgb(space->machine,indx,pal5bit(r),pal5bit(g),pal5bit(b));
1444   palette_set_color_rgb(space->machine, indx, pal5bit(r), pal5bit(g), pal5bit(b));
13611445}
13621446
13631447static WRITE16_HANDLER( ddenlovr_palette_w )
13641448{
13651449   if (ACCESSING_BITS_0_7)
1366      rongrong_palette_w(space,offset,data & 0xff);
1450      rongrong_palette_w(space, offset, data & 0xff);
13671451}
13681452
13691453
13701454WRITE8_HANDLER( ddenlovr_palette_base_w )
13711455{
1372   ddenlovr_palette_base[offset] = data;
1456   dynax_state *state = (dynax_state *)space->machine->driver_data;
1457   state->ddenlovr_palette_base[offset] = data;
13731458}
1459
13741460static WRITE8_HANDLER( ddenlovr_palette_base2_w )
13751461{
1376   ddenlovr_palette_base[offset+4] = data;
1462   dynax_state *state = (dynax_state *)space->machine->driver_data;
1463   state->ddenlovr_palette_base[offset + 4] = data;
13771464}
13781465
13791466WRITE8_HANDLER( ddenlovr_palette_mask_w )
13801467{
1381   ddenlovr_palette_mask[offset] = data;
1468   dynax_state *state = (dynax_state *)space->machine->driver_data;
1469   state->ddenlovr_palette_mask[offset] = data;
13821470}
1471
13831472static WRITE8_HANDLER( ddenlovr_palette_mask2_w )
13841473{
1385   ddenlovr_palette_mask[offset+4] = data;
1474   dynax_state *state = (dynax_state *)space->machine->driver_data;
1475   state->ddenlovr_palette_mask[offset + 4] = data;
13861476}
13871477
1478
13881479WRITE8_HANDLER( ddenlovr_transparency_pen_w )
13891480{
1390   ddenlovr_transparency_pen[offset] = data;
1481   dynax_state *state = (dynax_state *)space->machine->driver_data;
1482   state->ddenlovr_transparency_pen[offset] = data;
13911483}
1484
13921485static WRITE8_HANDLER( ddenlovr_transparency_pen2_w )
13931486{
1394   ddenlovr_transparency_pen[offset+4] = data;
1487   dynax_state *state = (dynax_state *)space->machine->driver_data;
1488   state->ddenlovr_transparency_pen[offset + 4] = data;
13951489}
13961490
1491
13971492WRITE8_HANDLER( ddenlovr_transparency_mask_w )
13981493{
1399   ddenlovr_transparency_mask[offset] = data;
1494   dynax_state *state = (dynax_state *)space->machine->driver_data;
1495   state->ddenlovr_transparency_mask[offset] = data;
14001496}
1497
14011498static WRITE8_HANDLER( ddenlovr_transparency_mask2_w )
14021499{
1403   ddenlovr_transparency_mask[offset+4] = data;
1500   dynax_state *state = (dynax_state *)space->machine->driver_data;
1501   state->ddenlovr_transparency_mask[offset + 4] = data;
14041502}
14051503
14061504
14071505static WRITE16_HANDLER( ddenlovr16_palette_base_w )
14081506{
1507   dynax_state *state = (dynax_state *)space->machine->driver_data;
1508
14091509   if (ACCESSING_BITS_0_7)
1410      ddenlovr_palette_base[offset] = data & 0xff;
1510      state->ddenlovr_palette_base[offset] = data & 0xff;
14111511}
14121512
14131513static WRITE16_HANDLER( ddenlovr16_palette_mask_w )
14141514{
1515   dynax_state *state = (dynax_state *)space->machine->driver_data;
1516
14151517   if (ACCESSING_BITS_0_7)
1416      ddenlovr_palette_mask[offset] = data & 0xff;
1518      state->ddenlovr_palette_mask[offset] = data & 0xff;
14171519}
14181520
14191521static WRITE16_HANDLER( ddenlovr16_transparency_pen_w )
14201522{
1523   dynax_state *state = (dynax_state *)space->machine->driver_data;
1524
14211525   if (ACCESSING_BITS_0_7)
1422      ddenlovr_transparency_pen[offset] = data & 0xff;
1526      state->ddenlovr_transparency_pen[offset] = data & 0xff;
14231527}
14241528
14251529static WRITE16_HANDLER( ddenlovr16_transparency_mask_w )
14261530{
1531   dynax_state *state = (dynax_state *)space->machine->driver_data;
1532
14271533   if (ACCESSING_BITS_0_7)
1428      ddenlovr_transparency_mask[offset] = data & 0xff;
1534      state->ddenlovr_transparency_mask[offset] = data & 0xff;
14291535}
14301536
14311537
r7640r7641
14411547}
14421548
14431549
1444static int okibank;
14451550
14461551static WRITE16_DEVICE_HANDLER( quiz365_oki_bank1_w )
14471552{
1553   dynax_state *state = (dynax_state *)device->machine->driver_data;
1554
14481555   if (ACCESSING_BITS_0_7)
14491556   {
1450      okibank = (okibank & 2) | (data & 1);
1451      okim6295_set_bank_base(device, okibank * 0x40000);
1557      state->okibank = (state->okibank & 2) | (data & 1);
1558      okim6295_set_bank_base(device, state->okibank * 0x40000);
14521559   }
14531560}
14541561
14551562static WRITE16_DEVICE_HANDLER( quiz365_oki_bank2_w )
14561563{
1564   dynax_state *state = (dynax_state *)device->machine->driver_data;
1565
14571566   if (ACCESSING_BITS_0_7)
14581567   {
1459      okibank = (okibank & 1) | ((data & 1) << 1);
1460      okim6295_set_bank_base(device, okibank * 0x40000);
1568      state->okibank = (state->okibank & 1) | ((data & 1) << 1);
1569      okim6295_set_bank_base(device, state->okibank * 0x40000);
14611570   }
14621571}
14631572
r7640r7641
14701579
14711580static READ16_HANDLER( unk16_r )
14721581{
1473   return unk_r(space,offset);
1582   return unk_r(space, offset);
14741583}
14751584
14761585
1477static UINT8 ddenlovr_select, ddenlovr_select2;
1478
14791586static WRITE8_DEVICE_HANDLER( ddenlovr_select_w )
14801587{
1481   ddenlovr_select = data;
1588   dynax_state *state = (dynax_state *)device->machine->driver_data;
1589   state->dsw_sel = data;
14821590}
14831591
14841592static WRITE16_HANDLER( ddenlovr_select_16_w )
14851593{
1594   dynax_state *state = (dynax_state *)space->machine->driver_data;
1595
14861596   if (ACCESSING_BITS_0_7)
1487      ddenlovr_select = data;
1597      state->dsw_sel = data;
14881598}
14891599
14901600static WRITE8_HANDLER( ddenlovr_select2_w )
14911601{
1492   ddenlovr_select2 = data;
1602   dynax_state *state = (dynax_state *)space->machine->driver_data;
1603   state->input_sel = data;
14931604}
14941605
14951606static WRITE16_HANDLER( ddenlovr_select2_16_w )
14961607{
1608   dynax_state *state = (dynax_state *)space->machine->driver_data;
1609
14971610   if (ACCESSING_BITS_0_7)
1498      ddenlovr_select2 = data;
1611      state->input_sel = data;
14991612}
15001613
15011614static READ8_HANDLER( rongrong_input2_r )
15021615{
1503//  logerror("%04x: input2_r offset %d select %x\n",cpu_get_pc(space->cpu),offset,ddenlovr_select2 );
1616   dynax_state *state = (dynax_state *)space->machine->driver_data;
1617
1618//  logerror("%04x: input2_r offset %d select %x\n", cpu_get_pc(space->cpu), offset, state->input_sel);
15041619   /* 0 and 1 are read from offset 1, 2 from offset 0... */
1505   switch( ddenlovr_select2 )
1620   switch (state->input_sel)
15061621   {
15071622      case 0x00:   return input_port_read(space->machine, "P1");
15081623      case 0x01:   return input_port_read(space->machine, "P2");
r7640r7641
15141629
15151630static READ8_DEVICE_HANDLER( quiz365_input_r )
15161631{
1517   if (!(ddenlovr_select & 0x01))   return input_port_read(device->machine, "DSW1");
1518   if (!(ddenlovr_select & 0x02))   return input_port_read(device->machine, "DSW2");
1519   if (!(ddenlovr_select & 0x04))   return input_port_read(device->machine, "DSW3");
1520   if (!(ddenlovr_select & 0x08))   return 0xff;//mame_rand(device->machine);
1521   if (!(ddenlovr_select & 0x10))   return 0xff;//mame_rand(device->machine);
1632   dynax_state *state = (dynax_state *)device->machine->driver_data;
1633
1634   if (!BIT(state->dsw_sel, 0))   return input_port_read(device->machine, "DSW1");
1635   if (!BIT(state->dsw_sel, 1))   return input_port_read(device->machine, "DSW2");
1636   if (!BIT(state->dsw_sel, 2))   return input_port_read(device->machine, "DSW3");
1637   if (!BIT(state->dsw_sel, 3))   return 0xff;//mame_rand(device->machine);
1638   if (!BIT(state->dsw_sel, 4))   return 0xff;//mame_rand(device->machine);
15221639   return 0xff;
15231640}
15241641
15251642static READ16_HANDLER( quiz365_input2_r )
15261643{
1527//  logerror("%04x: input2_r offset %d select %x\n",cpu_get_pc(space->cpu),offset,ddenlovr_select2 );
1644   dynax_state *state = (dynax_state *)space->machine->driver_data;
1645
1646//  logerror("%04x: input2_r offset %d select %x\n",cpu_get_pc(space->cpu), offset, state->input_sel);
15281647   /* 0 and 1 are read from offset 1, 2 from offset 0... */
1529   switch( ddenlovr_select2 )
1648   switch (state->input_sel)
15301649   {
15311650      case 0x10:   return input_port_read(space->machine, "P1");
15321651      case 0x11:   return input_port_read(space->machine, "P2");
r7640r7641
15351654   return 0xff;
15361655}
15371656
1538static UINT8 rongrong_blitter_busy_select;
15391657
15401658static WRITE8_HANDLER( rongrong_blitter_busy_w )
15411659{
1542   rongrong_blitter_busy_select = data;
1660   dynax_state *state = (dynax_state *)space->machine->driver_data;
1661   state->rongrong_blitter_busy_select = data;
1662
15431663   if (data != 0x18)
1544      logerror("%04x: rongrong_blitter_busy_w data = %02x\n",cpu_get_pc(space->cpu),data);
1664      logerror("%04x: rongrong_blitter_busy_w data = %02x\n", cpu_get_pc(space->cpu), data);
15451665}
1666
15461667static READ8_HANDLER( rongrong_blitter_busy_r )
15471668{
1548   switch( rongrong_blitter_busy_select )
1669   dynax_state *state = (dynax_state *)space->machine->driver_data;
1670
1671   switch (state->rongrong_blitter_busy_select)
15491672   {
15501673      case 0x18:   return 0;   // bit 5 = blitter busy
15511674
15521675      default:
1553         logerror("%04x: rongrong_blitter_busy_r with select = %02x\n",cpu_get_pc(space->cpu),rongrong_blitter_busy_select);
1676         logerror("%04x: rongrong_blitter_busy_r with select = %02x\n", cpu_get_pc(space->cpu), state->rongrong_blitter_busy_select);
15541677   }
15551678   return 0xff;
15561679}
r7640r7641
15581681
15591682static WRITE16_HANDLER( quiz365_coincounter_w )
15601683{
1684   dynax_state *state = (dynax_state *)space->machine->driver_data;
1685
15611686   if (ACCESSING_BITS_0_7)
15621687   {
1563      if (ddenlovr_select2 == 0x1c)
1688      if (state->input_sel == 0x1c)
15641689      {
15651690         coin_counter_w(space->machine, 0, ~data & 1);
15661691         coin_counter_w(space->machine, 1, ~data & 4);
r7640r7641
1572169737,28,12    11      ->      88
1573169867,4c,3a    ??      ->      51
15741699*/
1575static UINT16 quiz365_protection[2];
15761700static READ16_HANDLER( quiz365_protection_r )
15771701{
1578   switch(quiz365_protection[0])
1702   dynax_state *state = (dynax_state *)space->machine->driver_data;
1703
1704   switch (state->quiz365_protection[0])
15791705   {
15801706      case 0x3a:
15811707         return 0x0051;
r7640r7641
15831709         return 0x0088;
15841710   }
15851711}
1712
15861713static WRITE16_HANDLER( quiz365_protection_w )
15871714{
1588   COMBINE_DATA(quiz365_protection + offset);
1715   dynax_state *state = (dynax_state *)space->machine->driver_data;
1716   COMBINE_DATA(state->quiz365_protection + offset);
15891717}
15901718
15911719static ADDRESS_MAP_START( quiz365_map, ADDRESS_SPACE_PROGRAM, 16 )
r7640r7641
16251753ADDRESS_MAP_END
16261754
16271755
1628static UINT16 *ddenlovj_dsw_sel;
1629
16301756static READ16_HANDLER( ddenlovj_dsw_r )
16311757{
1758   dynax_state *state = (dynax_state *)space->machine->driver_data;
16321759   UINT16 dsw = 0;
1633   if ((~*ddenlovj_dsw_sel) & 0x01)   dsw |= input_port_read(space->machine, "DSW1");
1634   if ((~*ddenlovj_dsw_sel) & 0x02)   dsw |= input_port_read(space->machine, "DSW2");
1635   if ((~*ddenlovj_dsw_sel) & 0x04)   dsw |= input_port_read(space->machine, "DSW3");
1760   if ((~*state->dsw_sel16) & 0x01)   dsw |= input_port_read(space->machine, "DSW1");
1761   if ((~*state->dsw_sel16) & 0x02)   dsw |= input_port_read(space->machine, "DSW2");
1762   if ((~*state->dsw_sel16) & 0x04)   dsw |= input_port_read(space->machine, "DSW3");
16361763   return dsw;
16371764}
16381765
r7640r7641
16481775
16491776static CUSTOM_INPUT( ddenlovj_blitter_r )
16501777{
1651   return ddenlovr_blitter_irq_flag ? 0x03 : 0x00;      // bit 4 = 1 -> blitter busy
1778   dynax_state *state = (dynax_state *)field->port->machine->driver_data;
1779   return state->ddenlovr_blitter_irq_flag ? 0x03 : 0x00;      // bit 4 = 1 -> blitter busy
16521780}
16531781
16541782static ADDRESS_MAP_START( ddenlovj_map, ADDRESS_SPACE_PROGRAM, 16 )
r7640r7641
16751803   AM_RANGE(0x300184, 0x300185) AM_READ_PORT("SYSTEM")
16761804   AM_RANGE(0x300186, 0x300187) AM_READ(ddenlovj_dsw_r)                        // DSW
16771805   AM_RANGE(0x300188, 0x300189) AM_WRITE(ddenlovj_coincounter_w)                  // Coin Counters
1678   AM_RANGE(0x30018a, 0x30018b) AM_WRITEONLY AM_BASE(&ddenlovj_dsw_sel)         // DSW select
1806   AM_RANGE(0x30018a, 0x30018b) AM_WRITEONLY AM_BASE_MEMBER(dynax_state, dsw_sel16)         // DSW select
16791807   AM_RANGE(0x30018c, 0x30018d) AM_DEVWRITE("oki", ddenlovr_oki_bank_w)
16801808   AM_RANGE(0x3001ca, 0x3001cb) AM_WRITE(ddenlovr_blitter_irq_ack_w)               // Blitter irq acknowledge
16811809   AM_RANGE(0x300240, 0x300241) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)// Sound
r7640r7641
16831811ADDRESS_MAP_END
16841812
16851813
1686static UINT16 *ddenlovrk_protection1, *ddenlovrk_protection2;
16871814static READ16_HANDLER( ddenlovrk_protection1_r )
16881815{
1689   switch(*ddenlovrk_protection1)
1816   dynax_state *state = (dynax_state *)space->machine->driver_data;
1817   switch (*state->protection1)
16901818   {
16911819      case 0x007e:   return 0x00aa;
16921820   }
1693   return *ddenlovrk_protection1;
1821   return *state->protection1;
16941822}
16951823
16961824static READ16_HANDLER( ddenlovrk_protection2_r )
16971825{
1698   switch(*ddenlovrk_protection1)
1826   dynax_state *state = (dynax_state *)space->machine->driver_data;
1827   switch (*state->protection1)
16991828   {
1700      case 0x0000:   return *ddenlovrk_protection2;
1829      case 0x0000:   return *state->protection2;
17011830   }
17021831   return 0x80;
17031832}
17041833static WRITE16_HANDLER( ddenlovrk_protection2_w )
17051834{
1706   COMBINE_DATA( ddenlovrk_protection2 );
1707   okim6295_set_bank_base(devtag_get_device(space->machine, "oki"), ((*ddenlovrk_protection2)&0x7) * 0x40000);
1835   dynax_state *state = (dynax_state *)space->machine->driver_data;
1836
1837   COMBINE_DATA(state->protection2);
1838   okim6295_set_bank_base(state->oki, ((*state->protection2) & 0x7) * 0x40000);
17081839}
17091840
17101841static ADDRESS_MAP_START( ddenlovrk_map, ADDRESS_SPACE_PROGRAM, 16 )
17111842   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                          // ROM
17121843
1713   AM_RANGE(0x100000, 0x100001) AM_RAM_READ(ddenlovrk_protection1_r)                     AM_BASE(&ddenlovrk_protection1)
1714   AM_RANGE(0x200000, 0x200001) AM_READWRITE(ddenlovrk_protection2_r, ddenlovrk_protection2_w)   AM_BASE(&ddenlovrk_protection2)
1844   AM_RANGE(0x100000, 0x100001) AM_RAM_READ(ddenlovrk_protection1_r) AM_BASE_MEMBER(dynax_state, protection1)
1845   AM_RANGE(0x200000, 0x200001) AM_READWRITE(ddenlovrk_protection2_r, ddenlovrk_protection2_w) AM_BASE_MEMBER(dynax_state, protection2)
17151846
17161847   AM_RANGE(0xd00000, 0xd003ff) AM_WRITE(ddenlovr_palette_w)                        // Palette
17171848//  AM_RANGE(0xd01000, 0xd017ff) AM_RAM                                                    // ? B0 on startup, then 00
r7640r7641
17841915
17851916static CUSTOM_INPUT( nettoqc_special_r )
17861917{
1787   return ddenlovr_blitter_irq_flag ? 0x03 : 0x00;
1918   dynax_state *state = (dynax_state *)field->port->machine->driver_data;
1919   return state->ddenlovr_blitter_irq_flag ? 0x03 : 0x00;
17881920}
17891921
17901922static READ16_HANDLER( nettoqc_input_r )
17911923{
1792   if (!(ddenlovr_select & 0x01))   return input_port_read(space->machine, "DSW1");
1793   if (!(ddenlovr_select & 0x02))   return input_port_read(space->machine, "DSW2");
1794   if (!(ddenlovr_select & 0x04))   return input_port_read(space->machine, "DSW3");
1924   dynax_state *state = (dynax_state *)space->machine->driver_data;
1925
1926   if (!BIT(state->dsw_sel, 0))   return input_port_read(space->machine, "DSW1");
1927   if (!BIT(state->dsw_sel, 1))   return input_port_read(space->machine, "DSW2");
1928   if (!BIT(state->dsw_sel, 2))   return input_port_read(space->machine, "DSW3");
17951929   return 0xffff;
17961930}
17971931
r7640r7641
18021936    Writes 67 4c 3a to 200e0b then 19 to 200e0d. Expects to read 51 from 200c03
18031937*/
18041938
1805static UINT16 *nettoqc_protection_val;
1806
18071939static READ16_HANDLER( nettoqc_protection_r )
18081940{
1809   switch( nettoqc_protection_val[0] & 0xff )
1941   dynax_state *state = (dynax_state *)space->machine->driver_data;
1942
1943   switch (state->protection1[0] & 0xff)
18101944   {
18111945      case 0x3a:   return 0x0051;
18121946      default:   return 0x0088;
r7640r7641
18341968
18351969   AM_RANGE(0x200000, 0x2003ff) AM_WRITE(ddenlovr_palette_w)                        // Palette
18361970   AM_RANGE(0x200c02, 0x200c03) AM_READ(nettoqc_protection_r)                        //
1837   AM_RANGE(0x200e0a, 0x200e0d) AM_WRITEONLY AM_BASE(&nettoqc_protection_val)         //
1971   AM_RANGE(0x200e0a, 0x200e0d) AM_WRITEONLY AM_BASE_MEMBER(dynax_state, protection1)         //
18381972   AM_RANGE(0x201000, 0x2017ff) AM_WRITEONLY                                 // ?
18391973
18401974   AM_RANGE(0x300040, 0x300047) AM_WRITE(ddenlovr16_palette_base_w)
r7640r7641
18692003
18702004static READ8_HANDLER( rongrong_input_r )
18712005{
1872   if (!(ddenlovr_select & 0x01))   return input_port_read(space->machine, "DSW1");
1873   if (!(ddenlovr_select & 0x02))   return input_port_read(space->machine, "DSW2");
1874   if (!(ddenlovr_select & 0x04))   return 0xff;//mame_rand(space->machine);
1875   if (!(ddenlovr_select & 0x08))   return 0xff;//mame_rand(space->machine);
1876   if (!(ddenlovr_select & 0x10))   return input_port_read(space->machine, "DSW3");
2006   dynax_state *state = (dynax_state *)space->machine->driver_data;
2007
2008   if (!BIT(state->dsw_sel, 0))   return input_port_read(space->machine, "DSW1");
2009   if (!BIT(state->dsw_sel, 1))   return input_port_read(space->machine, "DSW2");
2010   if (!BIT(state->dsw_sel, 2))   return 0xff;//mame_rand(space->machine);
2011   if (!BIT(state->dsw_sel, 3))   return 0xff;//mame_rand(space->machine);
2012   if (!BIT(state->dsw_sel, 4))   return input_port_read(space->machine, "DSW3");
18772013   return 0xff;
18782014}
18792015
18802016static WRITE8_HANDLER( rongrong_select_w )
18812017{
1882   UINT8 *rom = memory_region(space->machine, "maincpu");
2018   dynax_state *state = (dynax_state *)space->machine->driver_data;
18832019
18842020//logerror("%04x: rongrong_select_w %02x\n",cpu_get_pc(space->cpu),data);
2021
18852022   /* bits 0-4 = **both** ROM bank **AND** input select */
1886   memory_set_bankptr(space->machine, "bank1", &rom[0x10000 + 0x8000 * (data & 0x1f)]);
1887   ddenlovr_select = data;
2023   memory_set_bank(space->machine, "bank1", data & 0x1f);
2024   state->dsw_sel = data;
18882025
18892026   /* bits 5-7 = RAM bank */
1890   memory_set_bankptr(space->machine, "bank2", &rom[0x110000 + 0x1000 * ((data & 0xe0) >> 5)]);
2027   memory_set_bank(space->machine, "bank2", ((data & 0xe0) >> 5));
18912028}
18922029
18932030
r7640r7641
18982035   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") AM_WRITE(rongrong_palette_w)      // ROM (Banked)
18992036ADDRESS_MAP_END
19002037
1901static ADDRESS_MAP_START( quizchq_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2038static ADDRESS_MAP_START( quizchq_portmap, ADDRESS_SPACE_IO, 8 )
2039   ADDRESS_MAP_GLOBAL_MASK(0xff)
19022040   AM_RANGE(0x00, 0x01) AM_WRITE(rongrong_blitter_w)
19032041   AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
19042042   AM_RANGE(0x1b, 0x1b) AM_READWRITE(rongrong_blitter_busy_r, rongrong_blitter_busy_w)
r7640r7641
19342072   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") AM_WRITE(rongrong_palette_w)      // ROM (Banked)
19352073ADDRESS_MAP_END
19362074
1937static ADDRESS_MAP_START( rongrong_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2075static ADDRESS_MAP_START( rongrong_portmap, ADDRESS_SPACE_IO, 8 )
2076   ADDRESS_MAP_GLOBAL_MASK(0xff)
19382077   AM_RANGE(0x00, 0x01) AM_WRITE(rongrong_blitter_w)
19392078   AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
19402079   AM_RANGE(0x1b, 0x1b) AM_READWRITE(rongrong_blitter_busy_r, rongrong_blitter_busy_w)
r7640r7641
19792118
19802119static WRITE8_HANDLER( mmpanic_rombank_w )
19812120{
1982   UINT8 *rom = memory_region(space->machine, "maincpu");
1983   memory_set_bankptr(space->machine, "bank1", &rom[0x10000 + 0x8000 * (data & 0x7)]);
2121   memory_set_bank(space->machine, "bank1", data & 0x7);
19842122   /* Bit 4? */
19852123}
19862124
19872125static WRITE8_HANDLER( mmpanic_soundlatch_w )
19882126{
1989   soundlatch_w(space,0,data);
1990   cputag_set_input_line(space->machine, "soundcpu", INPUT_LINE_NMI, PULSE_LINE);
2127   dynax_state *state = (dynax_state *)space->machine->driver_data;
2128
2129   soundlatch_w(space, 0, data);
2130   cpu_set_input_line(state->soundcpu, INPUT_LINE_NMI, PULSE_LINE);
19912131}
19922132
19932133static WRITE8_HANDLER( mmpanic_blitter_w )
19942134{
1995   blitter_w(space, 0,offset,data,0xdf);   // RST 18
2135   blitter_w(space, 0, offset, data, 0xdf);   // RST 18
19962136}
19972137static WRITE8_HANDLER( mmpanic_blitter2_w )
19982138{
1999   blitter_w(space, 1,offset,data,0xdf);   // RST 18
2139   blitter_w(space, 1, offset, data, 0xdf);   // RST 18
20002140}
20012141
2002/* A led for each of the 9 buttons */
2003static UINT16 mmpanic_leds;
2004
20052142static void mmpanic_update_leds(running_machine *machine)
20062143{
2007   set_led_status(machine, 0,mmpanic_leds);
2144   dynax_state *state = (dynax_state *)machine->driver_data;
2145   set_led_status(machine, 0, state->mmpanic_leds);
20082146}
20092147
20102148/* leds 1-8 */
20112149static WRITE8_HANDLER( mmpanic_leds_w )
20122150{
2013   mmpanic_leds = (mmpanic_leds & 0xff00) | data;
2151   dynax_state *state = (dynax_state *)space->machine->driver_data;
2152   state->mmpanic_leds = (state->mmpanic_leds & 0xff00) | data;
20142153   mmpanic_update_leds(space->machine);
20152154}
20162155/* led 9 */
20172156static WRITE8_HANDLER( mmpanic_leds2_w )
20182157{
2019   mmpanic_leds = (mmpanic_leds & 0xfeff) | (data ? 0x0100 : 0);
2158   dynax_state *state = (dynax_state *)space->machine->driver_data;
2159   state->mmpanic_leds = (state->mmpanic_leds & 0xfeff) | (data ? 0x0100 : 0);
20202160   mmpanic_update_leds(space->machine);
20212161}
20222162
20232163
20242164static WRITE8_HANDLER( mmpanic_lockout_w )
20252165{
2026   if (ddenlovr_select == 0x0c)
2166   dynax_state *state = (dynax_state *)space->machine->driver_data;
2167
2168   if (state->dsw_sel == 0x0c)
20272169   {
2028      coin_counter_w(space->machine, 0,(~data) & 0x01);
2029      coin_lockout_w(space->machine, 0,(~data) & 0x02);
2030      set_led_status(space->machine, 1,(~data) & 0x04);
2170      coin_counter_w(space->machine, 0, (~data) & 0x01);
2171      coin_lockout_w(space->machine, 0, (~data) & 0x02);
2172      set_led_status(space->machine, 1, (~data) & 0x04);
20312173   }
20322174}
20332175
r7640r7641
20952237   AM_RANGE(0x8000, 0xffff) AM_ROM   // ROM
20962238ADDRESS_MAP_END
20972239
2098static ADDRESS_MAP_START( mmpanic_sound_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2240static ADDRESS_MAP_START( mmpanic_sound_portmap, ADDRESS_SPACE_IO, 8 )
2241   ADDRESS_MAP_GLOBAL_MASK(0xff)
20992242   AM_RANGE(0x00, 0x00) AM_READ(soundlatch_r)
21002243   AM_RANGE(0x02, 0x02) AM_READNOP      // read just before port 00
21012244   AM_RANGE(0x04, 0x04) AM_NOP               // read only once at the start
r7640r7641
21322275
21332276static WRITE8_HANDLER( funkyfig_blitter_w )
21342277{
2135   blitter_w_funkyfig(space->machine, 0,offset,data,0xe0);
2278   blitter_w_funkyfig(space->machine, 0, offset, data, 0xe0);
21362279}
21372280
21382281static WRITE8_HANDLER( funkyfig_rombank_w )
21392282{
2140   UINT8 *rom = memory_region(space->machine, "maincpu");
2283   dynax_state *state = (dynax_state *)space->machine->driver_data;
21412284
2142   ddenlovr_select = data;
2285   state->dsw_sel = data;
21432286
2144   memory_set_bankptr(space->machine, "bank1", &rom[0x10000 + 0x8000 * (data & 0x0f)]);
2287   memory_set_bank(space->machine, "bank1", data & 0x0f);
21452288   // bit 4 selects palette ram at 8000?
2146   memory_set_bankptr(space->machine, "bank2", &rom[0x90000 + 0x1000 * ((data & 0xe0) >> 5)]);
2289   memory_set_bank(space->machine, "bank2", ((data & 0xe0) >> 5));
21472290}
21482291
21492292static READ8_HANDLER( funkyfig_dsw_r )
21502293{
2151   if (!(ddenlovr_select & 0x01))   return input_port_read(space->machine, "DSW1");
2152   if (!(ddenlovr_select & 0x02))   return input_port_read(space->machine, "DSW2");
2153   if (!(ddenlovr_select & 0x04))   return input_port_read(space->machine, "DSW3");
2154   logerror("%06x: warning, unknown bits read, ddenlovr_select = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select);
2294   dynax_state *state = (dynax_state *)space->machine->driver_data;
2295
2296   if (!BIT(state->dsw_sel, 0))  return input_port_read(space->machine, "DSW1");
2297   if (!BIT(state->dsw_sel, 1))  return input_port_read(space->machine, "DSW2");
2298   if (!BIT(state->dsw_sel, 2))  return input_port_read(space->machine, "DSW3");
2299   logerror("%06x: warning, unknown bits read, ddenlovr_select = %02x\n", cpu_get_pc(space->cpu), state->dsw_sel);
21552300   return 0xff;
21562301}
21572302
2158static UINT8 funkyfig_lockout;
2159
21602303static READ8_HANDLER( funkyfig_coin_r )
21612304{
2162   switch( ddenlovr_select2 )
2305   dynax_state *state = (dynax_state *)space->machine->driver_data;
2306
2307   switch (state->input_sel)
21632308   {
21642309      case 0x22:   return input_port_read(space->machine, "IN2");
2165      case 0x23:   return funkyfig_lockout;
2310      case 0x23:   return state->funkyfig_lockout;
21662311   }
2167   logerror("%06x: warning, unknown bits read, ddenlovr_select2 = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select2);
2312   logerror("%06x: warning, unknown bits read, ddenlovr_select2 = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
21682313   return 0xff;
21692314}
21702315
21712316static READ8_HANDLER( funkyfig_key_r )
21722317{
2173   switch( ddenlovr_select2 )
2318   dynax_state *state = (dynax_state *)space->machine->driver_data;
2319
2320   switch (state->input_sel)
21742321   {
21752322      case 0x20:   return input_port_read(space->machine, "IN0");
21762323      case 0x21:   return input_port_read(space->machine, "IN1");
21772324   }
2178   logerror("%06x: warning, unknown bits read, ddenlovr_select2 = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select2);
2325   logerror("%06x: warning, unknown bits read, ddenlovr_select2 = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
21792326   return 0xff;
21802327}
21812328
21822329static WRITE8_HANDLER( funkyfig_lockout_w )
21832330{
2184   switch( ddenlovr_select2 )
2331   dynax_state *state = (dynax_state *)space->machine->driver_data;
2332
2333   switch (state->input_sel)
21852334   {
21862335      case 0x2c:
2187         funkyfig_lockout = data;
2188         coin_counter_w(space->machine, 0,  data  & 0x01);
2189         coin_lockout_w(space->machine, 0,(~data) & 0x02);
2336         state->funkyfig_lockout = data;
2337         coin_counter_w(space->machine, 0,   data  & 0x01);
2338         coin_lockout_w(space->machine, 0, (~data) & 0x02);
21902339         if (data & ~0x03)
21912340            logerror("%06x: warning, unknown bits written, lockout = %02x\n", cpu_get_pc(space->cpu), data);
21922341         break;
r7640r7641
21942343//      case 0xef:  16 bytes on startup
21952344
21962345      default:
2197         logerror("%06x: warning, unknown bits written, ddenlovr_select2 = %02x, data = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select2, data);
2346         logerror("%06x: warning, unknown bits written, ddenlovr_select2 = %02x, data = %02x\n", cpu_get_pc(space->cpu), state->input_sel, data);
21982347   }
21992348}
22002349
2201static ADDRESS_MAP_START( funkyfig_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2350static ADDRESS_MAP_START( funkyfig_portmap, ADDRESS_SPACE_IO, 8 )
2351   ADDRESS_MAP_GLOBAL_MASK(0xff)
22022352   AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("oki", okim6295_r, okim6295_w)   // Sound
22032353   AM_RANGE(0x01, 0x01) AM_WRITE(mmpanic_leds_w)      // Leds
22042354   AM_RANGE(0x02, 0x02) AM_WRITE(mmpanic_soundlatch_w)   //
r7640r7641
22302380
22312381/* Sound CPU */
22322382
2233static ADDRESS_MAP_START( funkyfig_sound_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2383static ADDRESS_MAP_START( funkyfig_sound_portmap, ADDRESS_SPACE_IO, 8 )
2384   ADDRESS_MAP_GLOBAL_MASK(0xff)
22342385   AM_RANGE(0x02, 0x02) AM_READ(soundlatch_r)
22352386   AM_RANGE(0x04, 0x04) AM_READNOP   // read only once at the start
22362387ADDRESS_MAP_END
r7640r7641
22452396
22462397static WRITE8_HANDLER( hanakanz_rombank_w )
22472398{
2248   UINT8 *rom = memory_region(space->machine, "maincpu");
2249
2250   memory_set_bankptr(space->machine, "bank1", &rom[0x10000 + 0x8000 * (data & 0x0f)]);
2251
2252   memory_set_bankptr(space->machine, "bank2", &rom[0x90000 + 0x1000 * ((data & 0xf0) >> 4)]);
2399   memory_set_bank(space->machine, "bank1", data & 0x0f);
2400   memory_set_bank(space->machine, "bank2", ((data & 0xf0) >> 4));
22532401}
22542402
22552403static ADDRESS_MAP_START( hanakanz_map, ADDRESS_SPACE_PROGRAM, 8 )
r7640r7641
22602408ADDRESS_MAP_END
22612409
22622410
2263static UINT8 keyb,dsw;
22642411static WRITE8_HANDLER( hanakanz_keyb_w )
22652412{
2266   keyb = data;
2413   dynax_state *state = (dynax_state *)space->machine->driver_data;
2414   state->keyb = data;
22672415}
2416
22682417static WRITE8_HANDLER( hanakanz_dsw_w )
22692418{
2270   dsw = data;
2419   dynax_state *state = (dynax_state *)space->machine->driver_data;
2420   state->dsw_sel = data;
22712421}
22722422
22732423static READ8_HANDLER( hanakanz_keyb_r )
22742424{
2425   dynax_state *state = (dynax_state *)space->machine->driver_data;
2426
22752427   UINT8 val = 0xff;
22762428
2277   if      (!(keyb & 0x01))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
2278   else if (!(keyb & 0x02))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
2279   else if (!(keyb & 0x04))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
2280   else if (!(keyb & 0x08))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
2281   else if (!(keyb & 0x10))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
2429   if      (!BIT(state->keyb, 0))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
2430   else if (!BIT(state->keyb, 1))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
2431   else if (!BIT(state->keyb, 2))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
2432   else if (!BIT(state->keyb, 3))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
2433   else if (!BIT(state->keyb, 4))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
22822434
22832435   val |= input_port_read(space->machine, offset ? "HOPPER" : "BET");
22842436   return val;
r7640r7641
22862438
22872439static READ8_HANDLER( hanakanz_dsw_r )
22882440{
2289   if (!(dsw & 0x01))   return input_port_read(space->machine, "DSW1");
2290   if (!(dsw & 0x02))   return input_port_read(space->machine, "DSW2");
2291   if (!(dsw & 0x04))   return input_port_read(space->machine, "DSW3");
2292   if (!(dsw & 0x08))   return input_port_read(space->machine, "DSW4");
2293   if (!(dsw & 0x10))   return input_port_read(space->machine, "DSW5");
2441   dynax_state *state = (dynax_state *)space->machine->driver_data;
2442
2443   if (!BIT(state->dsw_sel, 0))   return input_port_read(space->machine, "DSW1");
2444   if (!BIT(state->dsw_sel, 1))   return input_port_read(space->machine, "DSW2");
2445   if (!BIT(state->dsw_sel, 2))   return input_port_read(space->machine, "DSW3");
2446   if (!BIT(state->dsw_sel, 3))   return input_port_read(space->machine, "DSW4");
2447   if (!BIT(state->dsw_sel, 4))   return input_port_read(space->machine, "DSW5");
22942448   return 0xff;
22952449}
22962450
r7640r7641
23012455
23022456static READ8_HANDLER( hanakanz_gfxrom_r )
23032457{
2304   UINT8 *rom   =   memory_region( space->machine, "blitter" );
2305   size_t size      =   memory_region_length( space->machine, "blitter" );
2306   int address      =   (ddenlovr_blit_address & 0xffffff) * 2;
2458   dynax_state *state = (dynax_state *)space->machine->driver_data;
2459   UINT8 *rom  = memory_region(space->machine, "blitter");
2460   size_t size = memory_region_length(space->machine, "blitter");
2461   int address = (state->ddenlovr_blit_address & 0xffffff) * 2;
23072462
2308   static UINT8 romdata[2];
2309
23102463   if (address >= size)
23112464   {
23122465      logerror("CPU#0 PC %06X: Error, Blitter address %06X out of range\n", cpu_get_pc(space->cpu), address);
r7640r7641
23152468
23162469   if (offset == 0)
23172470   {
2318      romdata[0] = rom[address + 0];
2319      romdata[1] = rom[address + 1];
2471      state->romdata[0] = rom[address + 0];
2472      state->romdata[1] = rom[address + 1];
23202473
2321      ddenlovr_blit_address = (ddenlovr_blit_address + 1) & 0xffffff;
2474      state->ddenlovr_blit_address = (state->ddenlovr_blit_address + 1) & 0xffffff;
23222475
2323      return romdata[0];
2476      return state->romdata[0];
23242477   }
23252478   else
23262479   {
2327      return romdata[1];
2480      return state->romdata[1];
23282481   }
23292482}
23302483
r7640r7641
23422495      logerror("%04x: warning, coin counter = %02x\n", cpu_get_pc(space->cpu), data);
23432496
23442497#ifdef MAME_DEBUG
2345//      popmessage("93 = %02x",data);
2498//      popmessage("93 = %02x", data);
23462499#endif
23472500}
23482501
23492502static WRITE8_HANDLER( hanakanz_palette_w )
23502503{
2351   static int palette_index;
2504   dynax_state *state = (dynax_state *)space->machine->driver_data;
23522505
2353   if (ddenlovr_blit_reg & 0x80)
2506   if (state->ddenlovr_blit_latch & 0x80)
23542507   {
2355      palette_index = data | ((ddenlovr_blit_reg & 1) << 8);
2508      state->palette_index = data | ((state->ddenlovr_blit_latch & 1) << 8);
23562509   }
23572510   else
23582511   {
23592512      // 0bbggggg bbbrrrrr
23602513      // 04343210 21043210
23612514
2362      int g = ddenlovr_blit_reg & 0x1f;
2515      int g = state->ddenlovr_blit_latch & 0x1f;
23632516      int r = data & 0x1f;
2364      int b = ((data & 0xe0) >> 5) | ((ddenlovr_blit_reg & 0x60) >> 2);
2365      palette_set_color_rgb(space->machine,(palette_index++)&0x1ff,pal5bit(r),pal5bit(g),pal5bit(b));
2517      int b = ((data & 0xe0) >> 5) | ((state->ddenlovr_blit_latch & 0x60) >> 2);
2518      palette_set_color_rgb(space->machine, (state->palette_index++) & 0x1ff, pal5bit(r), pal5bit(g), pal5bit(b));
23662519   }
23672520}
23682521
r7640r7641
23762529   return mame_rand(space->machine);
23772530}
23782531
2379static ADDRESS_MAP_START( hanakanz_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2532static ADDRESS_MAP_START( hanakanz_portmap, ADDRESS_SPACE_IO, 8 )
2533   ADDRESS_MAP_GLOBAL_MASK(0xff)
23802534   AM_RANGE(0x2c, 0x2c) AM_READ(hanakanz_busy_r) AM_DEVWRITE("oki", hanakanz_oki_bank_w)
23812535   AM_RANGE(0x2e, 0x2e) AM_WRITE(hanakanz_blitter_reg_w)
23822536   AM_RANGE(0x30, 0x30) AM_WRITE(hanakanz_rombank_w)
r7640r7641
23962550ADDRESS_MAP_END
23972551
23982552
2399static ADDRESS_MAP_START( hkagerou_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2553static ADDRESS_MAP_START( hkagerou_portmap, ADDRESS_SPACE_IO, 8 )
2554   ADDRESS_MAP_GLOBAL_MASK(0xff)
24002555   AM_RANGE(0x2c, 0x2c) AM_READ(hanakanz_busy_r) AM_DEVWRITE("oki", hanakanz_oki_bank_w)
24012556   AM_RANGE(0x2e, 0x2e) AM_WRITE(hanakanz_blitter_reg_w)
24022557   AM_RANGE(0x30, 0x30) AM_WRITE(hanakanz_rombank_w)
r7640r7641
24162571ADDRESS_MAP_END
24172572
24182573
2419static UINT8 mjreach1_protection_val;
2420
24212574static WRITE8_HANDLER( mjreach1_protection_w )
24222575{
2423   mjreach1_protection_val = data;
2576   dynax_state *state = (dynax_state *)space->machine->driver_data;
2577   state->prot_val = data;
24242578}
24252579
24262580static READ8_HANDLER( mjreach1_protection_r )
24272581{
2428   return mjreach1_protection_val;
2582   dynax_state *state = (dynax_state *)space->machine->driver_data;
2583   return state->prot_val;
24292584}
24302585
2431static ADDRESS_MAP_START( mjreach1_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2586static ADDRESS_MAP_START( mjreach1_portmap, ADDRESS_SPACE_IO, 8 )
2587   ADDRESS_MAP_GLOBAL_MASK(0xff)
24322588   AM_RANGE(0x2c, 0x2c) AM_READ(hanakanz_busy_r) AM_DEVWRITE("oki", hanakanz_oki_bank_w)
24332589   AM_RANGE(0x2e, 0x2e) AM_WRITE(hanakanz_blitter_reg_w)
24342590   AM_RANGE(0x30, 0x30) AM_WRITE(hanakanz_rombank_w)
r7640r7641
24552611
24562612static READ8_HANDLER( mjchuuka_keyb_r )
24572613{
2614   dynax_state *state = (dynax_state *)space->machine->driver_data;
24582615   UINT8 val = 0xff;
24592616
2460   if      (!(keyb & 0x01))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
2461   else if (!(keyb & 0x02))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
2462   else if (!(keyb & 0x04))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
2463   else if (!(keyb & 0x08))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
2464   else if (!(keyb & 0x10))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
2617   if      (!BIT(state->keyb, 0))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
2618   else if (!BIT(state->keyb, 1))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
2619   else if (!BIT(state->keyb, 2))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
2620   else if (!BIT(state->keyb, 3))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
2621   else if (!BIT(state->keyb, 4))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
24652622
24662623   val |= input_port_read(space->machine, offset ? "HOPPER" : "BET");
2467   if (offset)   val |= 0x80;   // blitter busy
2624
2625   if (offset)
2626      val |= 0x80;   // blitter busy
2627
24682628   return val;
24692629}
24702630
24712631static WRITE8_HANDLER( mjchuuka_blitter_w )
24722632{
2473   hanakanz_blitter_reg_w(space,0,offset >> 8);
2474   hanakanz_blitter_data_w(space,0,data);
2633   hanakanz_blitter_reg_w(space, 0, offset >> 8);
2634   hanakanz_blitter_data_w(space, 0, data);
24752635}
24762636
2477static UINT8 mjchuuka_romdata[2];
2478
24792637static void mjchuuka_get_romdata(running_machine *machine)
24802638{
2481   UINT8 *rom   =   memory_region( machine, "blitter" );
2482   size_t size      =   memory_region_length( machine, "blitter" );
2483   int address      =   (ddenlovr_blit_address & 0xffffff) * 2;
2639   dynax_state *state = (dynax_state *)machine->driver_data;
2640   UINT8 *rom = memory_region(machine, "blitter");
2641   size_t size = memory_region_length(machine, "blitter");
2642   int address = (state->ddenlovr_blit_address & 0xffffff) * 2;
24842643
24852644   if (address >= size)
24862645   {
r7640r7641
24882647      address %= size;
24892648   }
24902649
2491   mjchuuka_romdata[0] = rom[address + 0];
2492   mjchuuka_romdata[1] = rom[address + 1];
2650   state->romdata[0] = rom[address + 0];
2651   state->romdata[1] = rom[address + 1];
24932652}
24942653
24952654static READ8_HANDLER( mjchuuka_gfxrom_0_r )
24962655{
2656   dynax_state *state = (dynax_state *)space->machine->driver_data;
24972657   mjchuuka_get_romdata(space->machine);
2498   ddenlovr_blit_address++;
2499   return mjchuuka_romdata[0];
2658   state->ddenlovr_blit_address++;
2659   return state->romdata[0];
25002660}
2661
25012662static READ8_HANDLER( mjchuuka_gfxrom_1_r )
25022663{
2503   return mjchuuka_romdata[1];
2664   dynax_state *state = (dynax_state *)space->machine->driver_data;
2665   return state->romdata[1];
25042666}
25052667
25062668static WRITE8_HANDLER( mjchuuka_palette_w )
25072669{
2508   static int palette_index;
2670   dynax_state *state = (dynax_state *)space->machine->driver_data;
25092671   UINT16 rgb = (offset & 0xff00) | data;
25102672
25112673   if (rgb & 0x8000)
25122674   {
2513      palette_index = rgb & 0x1ff;
2675      state->palette_index = rgb & 0x1ff;
25142676   }
25152677   else
25162678   {
r7640r7641
25202682      int r = (rgb >> 0) & 0x1f;
25212683      int g = (rgb >> 8) & 0x1f;
25222684      int b = ((rgb >> 5) & 0x07) | ((rgb & 0x6000) >> 10);
2523      palette_set_color_rgb(space->machine,(palette_index++)&0x1ff,pal5bit(r),pal5bit(g),pal5bit(b));
2685      palette_set_color_rgb(space->machine, (state->palette_index++) & 0x1ff, pal5bit(r), pal5bit(g), pal5bit(b));
25242686   }
25252687}
25262688
r7640r7641
25312693   // bit 3 = lockout
25322694   // bit 8?
25332695
2534   coin_counter_w(space->machine, 0, data   & 0x01);
2535   coin_lockout_w(space->machine, 0,(~data) & 0x08);
2696   coin_counter_w(space->machine, 0,  data   & 0x01);
2697   coin_lockout_w(space->machine, 0, (~data) & 0x08);
25362698
25372699   if (data & 0x74)
25382700      logerror("%04x: warning, coin counter = %02x\n", cpu_get_pc(space->cpu), data);
r7640r7641
25912753
25922754static WRITE8_HANDLER( mjmyster_rambank_w )
25932755{
2594   UINT8 *rom = memory_region(space->machine, "maincpu");
2595   memory_set_bankptr(space->machine, "bank2", &rom[0x90000 + 0x1000 * (data & 0x07)]);
2596//  logerror("%04x: rambank = %02x\n", cpu_get_pc(space->cpu), data);
2756   memory_set_bank(space->machine, "bank2", data & 0x07);
2757   //logerror("%04x: rambank = %02x\n", cpu_get_pc(space->cpu), data);
25972758}
25982759
25992760static WRITE8_HANDLER( mjmyster_select2_w )
26002761{
2601   ddenlovr_select2 = data;
2762   dynax_state *state = (dynax_state *)space->machine->driver_data;
2763   state->input_sel = data;
26022764
2603   if (data & 0x80)   keyb = 1;
2765   if (data & 0x80)
2766      state->keyb = 1;
26042767}
26052768
26062769static READ8_HANDLER( mjmyster_coins_r )
26072770{
2608   switch( ddenlovr_select2 )
2771   dynax_state *state = (dynax_state *)space->machine->driver_data;
2772
2773   switch (state->input_sel)
26092774   {
26102775      case 0x00:   return input_port_read(space->machine, "SYSTEM");
26112776      case 0x01:   return 0xff;
r7640r7641
26132778      case 0x03:   return 0xff;
26142779   }
26152780
2616   logerror("%06x: warning, unknown bits read, ddenlovr_select2 = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select2);
2781   logerror("%06x: warning, unknown bits read, ddenlovr_select2 = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
26172782
26182783   return 0xff;
26192784}
26202785
26212786static READ8_HANDLER( mjmyster_keyb_r )
26222787{
2788   dynax_state *state = (dynax_state *)space->machine->driver_data;
26232789   UINT8 ret = 0xff;
26242790
2625   if      (keyb & 0x01)   ret = input_port_read(space->machine, "KEY0");
2626   else if   (keyb & 0x02)   ret = input_port_read(space->machine, "KEY1");
2627   else if   (keyb & 0x04)   ret = input_port_read(space->machine, "KEY2");
2628   else if   (keyb & 0x08)   ret = input_port_read(space->machine, "KEY3");
2629   else if   (keyb & 0x10)   ret = input_port_read(space->machine, "KEY4");
2630   else   logerror("%06x: warning, unknown bits read, keyb = %02x\n", cpu_get_pc(space->cpu), keyb);
2791   if      (BIT(state->keyb, 0))   ret = input_port_read(space->machine, "KEY0");
2792   else if (BIT(state->keyb, 1))   ret = input_port_read(space->machine, "KEY1");
2793   else if (BIT(state->keyb, 2))   ret = input_port_read(space->machine, "KEY2");
2794   else if (BIT(state->keyb, 3))   ret = input_port_read(space->machine, "KEY3");
2795   else if (BIT(state->keyb, 4))   ret = input_port_read(space->machine, "KEY4");
2796   else   logerror("%06x: warning, unknown bits read, keyb = %02x\n", cpu_get_pc(space->cpu), state->keyb);
26312797
2632   keyb <<= 1;
2798   state->keyb <<= 1;
26332799
26342800   return ret;
26352801}
26362802
26372803static READ8_HANDLER( mjmyster_dsw_r )
26382804{
2639   if (!(ddenlovr_select & 0x01))   return input_port_read(space->machine, "DSW4");
2640   if (!(ddenlovr_select & 0x02))   return input_port_read(space->machine, "DSW3");
2641   if (!(ddenlovr_select & 0x04))   return input_port_read(space->machine, "DSW2");
2642   if (!(ddenlovr_select & 0x08))   return input_port_read(space->machine, "DSW1");
2643   if (!(ddenlovr_select & 0x10))   return input_port_read(space->machine, "DSW5");
2644   logerror("%06x: warning, unknown bits read, ddenlovr_select = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select);
2805   dynax_state *state = (dynax_state *)space->machine->driver_data;
2806
2807   if (!BIT(state->dsw_sel, 0))   return input_port_read(space->machine, "DSW4");
2808   if (!BIT(state->dsw_sel, 1))   return input_port_read(space->machine, "DSW3");
2809   if (!BIT(state->dsw_sel, 2))   return input_port_read(space->machine, "DSW2");
2810   if (!BIT(state->dsw_sel, 3))   return input_port_read(space->machine, "DSW1");
2811   if (!BIT(state->dsw_sel, 4))   return input_port_read(space->machine, "DSW5");
2812   logerror("%06x: warning, unknown bits read, ddenlovr_select = %02x\n", cpu_get_pc(space->cpu), state->dsw_sel);
26452813   return 0xff;
26462814}
26472815
26482816static WRITE8_HANDLER( mjmyster_coincounter_w )
26492817{
2650   switch( ddenlovr_select2 )
2818   dynax_state *state = (dynax_state *)space->machine->driver_data;
2819
2820   switch (state->input_sel)
26512821   {
26522822      case 0x0c:
26532823         coin_counter_w(space->machine, 0, (~data) & 0x01);   // coin in
r7640r7641
26592829         break;
26602830
26612831      default:
2662         logerror("%06x: warning, unknown bits written, ddenlovr_select2 = %02x, data = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select2, data);
2832         logerror("%06x: warning, unknown bits written, ddenlovr_select2 = %02x, data = %02x\n", cpu_get_pc(space->cpu), state->input_sel, data);
26632833   }
26642834}
26652835
26662836static WRITE8_HANDLER( mjmyster_blitter_w )
26672837{
2668   blitter_w(space, 0,offset,data,0xfc);
2838   blitter_w(space, 0, offset, data, 0xfc);
26692839}
26702840
2671static ADDRESS_MAP_START( mjmyster_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
2841static ADDRESS_MAP_START( mjmyster_portmap, ADDRESS_SPACE_IO, 8 )
2842   ADDRESS_MAP_GLOBAL_MASK(0xff)
26722843   AM_RANGE(0x00, 0x01) AM_WRITE(mjmyster_blitter_w)
26732844   AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
26742845   AM_RANGE(0x1c, 0x1c) AM_WRITE(mjmyster_rambank_w)
r7640r7641
26992870                            Hanafuda Hana Ginga
27002871***************************************************************************/
27012872
2702static UINT8 hginga_rombank;
27032873static WRITE8_HANDLER( hginga_rombank_w )
27042874{
2705   UINT8 *rom = memory_region(space->machine, "maincpu");
2706   memory_set_bankptr(space->machine, "bank1", &rom[0x10000 + 0x8000 * (data & 0x7)]);
2707   hginga_rombank = data;
2875   dynax_state *state = (dynax_state *)space->machine->driver_data;
2876   memory_set_bank(space->machine, "bank1", data & 0x7);
2877   state->hginga_rombank = data;
27082878}
27092879
27102880// similar to rongrong
27112881static READ8_HANDLER( hginga_protection_r )
27122882{
2883   dynax_state *state = (dynax_state *)space->machine->driver_data;
27132884   UINT8 *rom = memory_region(space->machine, "maincpu");
2714   if (hginga_rombank & 0x10)
2715      return hanakanz_rand_r(space,0);
2716   return rom[0x10000 + 0x8000 * (hginga_rombank & 0x7) + 0xf601 - 0x8000];
2885
2886   if (state->hginga_rombank & 0x10)
2887      return hanakanz_rand_r(space, 0);
2888   return rom[0x10000 + 0x8000 * (state->hginga_rombank & 0x7) + 0xf601 - 0x8000];
27172889}
27182890
27192891static ADDRESS_MAP_START( hginga_map, ADDRESS_SPACE_PROGRAM, 8 )
r7640r7641
27282900
27292901static READ8_DEVICE_HANDLER( hginga_dsw_r )
27302902{
2731   if (!(ddenlovr_select & 0x01))   return input_port_read(device->machine, "DSW4");
2732   if (!(ddenlovr_select & 0x02))   return input_port_read(device->machine, "DSW3");
2733   if (!(ddenlovr_select & 0x04))   return input_port_read(device->machine, "DSW2");
2734   if (!(ddenlovr_select & 0x08))   return input_port_read(device->machine, "DSW1");
2735   if (!(ddenlovr_select & 0x10))   return input_port_read(device->machine, "DSW5");
2736   logerror("%s: warning, unknown bits read, ddenlovr_select = %02x\n", cpuexec_describe_context(device->machine), ddenlovr_select);
2903   dynax_state *state = (dynax_state *)device->machine->driver_data;
2904
2905   if (!BIT(state->dsw_sel, 0))   return input_port_read(device->machine, "DSW4");
2906   if (!BIT(state->dsw_sel, 1))   return input_port_read(device->machine, "DSW3");
2907   if (!BIT(state->dsw_sel, 2))   return input_port_read(device->machine, "DSW2");
2908   if (!BIT(state->dsw_sel, 3))   return input_port_read(device->machine, "DSW1");
2909   if (!BIT(state->dsw_sel, 4))   return input_port_read(device->machine, "DSW5");
2910
2911   logerror("%s: warning, unknown bits read, ddenlovr_select = %02x\n", cpuexec_describe_context(device->machine), state->dsw_sel);
27372912   return 0xff;
27382913}
27392914
2740static UINT8 hginga_select, hginga_ip, hginga_coins;
2741
27422915static WRITE8_HANDLER( hginga_input_w )
27432916{
2744   hginga_select = data;
2745   hginga_ip = 0;
2917   dynax_state *state = (dynax_state *)space->machine->driver_data;
2918   state->input_sel = data;
2919   state->keyb = 0;
27462920}
27472921
27482922static READ8_HANDLER( hginga_coins_r )
27492923{
2750   switch( hginga_select )
2924   dynax_state *state = (dynax_state *)space->machine->driver_data;
2925
2926   switch (state->input_sel)
27512927   {
27522928      case 0x20:   return input_port_read(space->machine, "SYSTEM");
27532929      case 0x21:   return input_port_read(space->machine, "BET");
27542930      case 0x22:   return 0x7f;   // bit 7 = blitter busy, bit 6 = hopper
2755      case 0x23:   return hginga_coins;
2931      case 0x23:   return state->coins;
27562932   }
2757   logerror("%04x: coins_r with select = %02x\n", cpu_get_pc(space->cpu), hginga_select);
2933   logerror("%04x: coins_r with select = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
27582934   return 0xff;
27592935}
27602936
27612937static WRITE8_HANDLER( hginga_80_w )
27622938{
2763//  popmessage("port 80 = %02x",data);
2939//  popmessage("port 80 = %02x", data);
27642940}
27652941
27662942static WRITE8_HANDLER( hginga_coins_w )
27672943{
2768   switch( hginga_select )
2944   dynax_state *state = (dynax_state *)space->machine->driver_data;
2945
2946   switch (state->input_sel)
27692947   {
27702948      case 0x2d:
27712949         break;
r7640r7641
27772955         // bit 7?
27782956         coin_counter_w(space->machine, 0, data & 1);
27792957#ifdef MAME_DEBUG
2780//          popmessage("COINS %02x",data);
2958//          popmessage("COINS %02x", data);
27812959#endif
2782         hginga_coins = data;
2960         state->coins = data;
27832961         break;
27842962      default:
2785         logerror("%04x: coins_w with select = %02x, data = %02x\n", cpu_get_pc(space->cpu), hginga_select, data);
2963         logerror("%04x: coins_w with select = %02x, data = %02x\n", cpu_get_pc(space->cpu), state->input_sel, data);
27862964   }
27872965}
27882966
27892967static READ8_HANDLER( hginga_input_r )
27902968{
2969   dynax_state *state = (dynax_state *)space->machine->driver_data;
27912970   static const char *const keynames0[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4" };
27922971   static const char *const keynames1[] = { "KEY5", "KEY6", "KEY7", "KEY8", "KEY9" };
27932972
2794   switch( hginga_select )
2973   switch (state->input_sel)
27952974   {
27962975      case 0x2d:
27972976         return 0xff;
27982977
27992978      // player 1
28002979      case 0xa1:
2801         return input_port_read(space->machine, keynames0[hginga_ip++]);
2980         return input_port_read(space->machine, keynames0[state->keyb++]);
28022981
28032982      // player 2
28042983      case 0xa2:
2805         return input_port_read(space->machine, keynames1[hginga_ip++]);
2984         return input_port_read(space->machine, keynames1[state->keyb++]);
28062985   }
2807   logerror("%04x: input_r with select = %02x\n", cpu_get_pc(space->cpu), hginga_select);
2986   logerror("%04x: input_r with select = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
28082987   return 0xff;
28092988}
28102989
28112990static WRITE8_HANDLER( hginga_blitter_w )
28122991{
2992   dynax_state *state = (dynax_state *)space->machine->driver_data;
28132993   if (offset == 0)
28142994   {
2815      ddenlovr_blit_reg = data;
2995      state->ddenlovr_blit_latch = data;
28162996   }
28172997   else
28182998   {
2819      switch (ddenlovr_blit_reg & 0x3f)
2999      switch (state->ddenlovr_blit_latch & 0x3f)
28203000      {
28213001         case 0x00:
28223002            switch (data & 0xf)
r7640r7641
28353015            break;
28363016      }
28373017   }
2838   blitter_w(space, 0,offset,data,0xfc);
3018   blitter_w(space, 0, offset, data, 0xfc);
28393019}
28403020
2841static ADDRESS_MAP_START( hginga_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
3021static ADDRESS_MAP_START( hginga_portmap, ADDRESS_SPACE_IO, 8 )
3022   ADDRESS_MAP_GLOBAL_MASK(0xff)
28423023   AM_RANGE(0x00, 0x01) AM_WRITE(hginga_blitter_w)
28433024   AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
28443025   AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(mjmyster_rambank_w)
r7640r7641
28683049                             Hanafuda Hana Gokou
28693050***************************************************************************/
28703051
2871static UINT8 hgokou_hopper;
2872
2873static UINT8 hgokou_player_r(const address_space *space, int player)
3052static UINT8 hgokou_player_r( const address_space *space, int player )
28743053{
2875   UINT8 hopper_bit = ((hgokou_hopper && !(video_screen_get_frame_number(space->machine->primary_screen)%10)) ? 0 : (1<<6));
3054   dynax_state *state = (dynax_state *)space->machine->driver_data;
3055   UINT8 hopper_bit = ((state->hopper && !(video_screen_get_frame_number(space->machine->primary_screen) % 10)) ? 0 : (1 << 6));
28763056
2877   if (!(ddenlovr_select2 & 0x01))   return input_port_read(space->machine, player ? "KEY5" : "KEY0") | hopper_bit;
2878   if (!(ddenlovr_select2 & 0x02))   return input_port_read(space->machine, player ? "KEY6" : "KEY1") | hopper_bit;
2879   if (!(ddenlovr_select2 & 0x04))   return input_port_read(space->machine, player ? "KEY7" : "KEY2") | hopper_bit;
2880   if (!(ddenlovr_select2 & 0x08))   return input_port_read(space->machine, player ? "KEY8" : "KEY3") | hopper_bit;
2881   if (!(ddenlovr_select2 & 0x10))   return input_port_read(space->machine, player ? "KEY9" : "KEY4") | hopper_bit;
3057   if (!BIT(state->input_sel, 0))   return input_port_read(space->machine, player ? "KEY5" : "KEY0") | hopper_bit;
3058   if (!BIT(state->input_sel, 1))   return input_port_read(space->machine, player ? "KEY6" : "KEY1") | hopper_bit;
3059   if (!BIT(state->input_sel, 2))   return input_port_read(space->machine, player ? "KEY7" : "KEY2") | hopper_bit;
3060   if (!BIT(state->input_sel, 3))   return input_port_read(space->machine, player ? "KEY8" : "KEY3") | hopper_bit;
3061   if (!BIT(state->input_sel, 4))   return input_port_read(space->machine, player ? "KEY9" : "KEY4") | hopper_bit;
28823062
28833063   return 0x7f;   // bit 7 = blitter busy, bit 6 = hopper
28843064}
28853065
3066static WRITE8_HANDLER( hgokou_dsw_sel_w )
3067{
3068   dynax_state *state = (dynax_state *)space->machine->driver_data;
3069   state->dsw_sel = data;
3070}
3071
28863072static READ8_HANDLER( hgokou_input_r )
28873073{
2888   switch (hginga_select)
3074   dynax_state *state = (dynax_state *)space->machine->driver_data;
3075
3076   switch (state->dsw_sel)
28893077   {
28903078      case 0x20:   return input_port_read(space->machine, "SYSTEM");
28913079      case 0x21:   return hgokou_player_r(space, 1);
28923080      case 0x22:   return hgokou_player_r(space, 0);
2893      case 0x23:   return hginga_coins;
3081      case 0x23:   return state->coins;
28943082   }
2895   logerror("%06x: warning, unknown bits read, hginga_select = %02x\n", cpu_get_pc(space->cpu), hginga_select);
3083   logerror("%06x: warning, unknown bits read, dsw_sel = %02x\n", cpu_get_pc(space->cpu), state->dsw_sel);
28963084   return 0xff;
28973085}
28983086
28993087static WRITE8_HANDLER( hgokou_input_w )
29003088{
2901   switch (hginga_select)
3089   dynax_state *state = (dynax_state *)space->machine->driver_data;
3090
3091   switch (state->dsw_sel)
29023092   {
29033093      case 0x2c:
29043094         // bit 0 = coin counter
29053095         // bit 1 = out counter
29063096         // bit 2 = hopper
29073097         coin_counter_w(space->machine, 0, data & 1);
2908         hgokou_hopper = data & 0x04;
3098         state->hopper = data & 0x04;
29093099#ifdef MAME_DEBUG
29103100//          popmessage("COINS %02x",data);
29113101#endif
2912         hginga_coins = data;
3102         state->coins = data;
29133103         break;
29143104
2915      case 0x2d:   ddenlovr_select2 = data;   break;
3105      case 0x2d:   state->input_sel = data;   break;
29163106
29173107      case 0x2f:   break;   // ? written with 2f
29183108
29193109      default:
2920         logerror("%04x: input_w with select = %02x, data = %02x\n",cpu_get_pc(space->cpu),hginga_select,data);
3110         logerror("%04x: input_w with select = %02x, data = %02x\n", cpu_get_pc(space->cpu), state->dsw_sel, data);
29213111   }
29223112}
29233113
29243114// similar to rongrong
29253115static READ8_HANDLER( hgokou_protection_r )
29263116{
3117   dynax_state *state = (dynax_state *)space->machine->driver_data;
29273118   UINT8 *rom = memory_region(space->machine, "maincpu");
2928   if (hginga_rombank == 0)
2929      return hanakanz_rand_r(space,0);
2930   return rom[0x10000 + 0x8000 * (hginga_rombank & 0x7) + 0xe601 - 0x8000];
3119
3120   if (state->hginga_rombank == 0)
3121      return hanakanz_rand_r(space, 0);
3122   return rom[0x10000 + 0x8000 * (state->hginga_rombank & 0x7) + 0xe601 - 0x8000];
29313123}
29323124
29333125static ADDRESS_MAP_START( hgokou_map, ADDRESS_SPACE_PROGRAM, 8 )
r7640r7641
29413133ADDRESS_MAP_END
29423134
29433135
2944static ADDRESS_MAP_START( hgokou_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
3136static ADDRESS_MAP_START( hgokou_portmap, ADDRESS_SPACE_IO, 8 )
3137   ADDRESS_MAP_GLOBAL_MASK(0xff)
29453138   AM_RANGE(0x00, 0x01) AM_WRITE(hginga_blitter_w)
29463139   AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
29473140   AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(mjmyster_rambank_w)      // ? ack on RTC int
r7640r7641
29553148   AM_RANGE(0x55, 0x55) AM_WRITE(ddenlovr_priority_w)
29563149   AM_RANGE(0x56, 0x56) AM_WRITE(ddenlovr_layer_enable_w)
29573150   AM_RANGE(0x58, 0x58) AM_READ(unk_r)                           // ? must be 78 on startup
2958   AM_RANGE(0x60, 0x60) AM_WRITE(hginga_input_w)
3151   AM_RANGE(0x60, 0x60) AM_WRITE(hgokou_dsw_sel_w)
29593152   AM_RANGE(0x61, 0x61) AM_WRITE(hgokou_input_w)
29603153   AM_RANGE(0x62, 0x62) AM_READ(hgokou_input_r)
29613154   AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_r, okim6295_w)
r7640r7641
29733166
29743167static WRITE8_HANDLER( hparadis_select_w )
29753168{
2976   UINT8 *rom = memory_region(space->machine, "maincpu");
3169   dynax_state *state = (dynax_state *)space->machine->driver_data;
29773170
2978   ddenlovr_select = data;
2979   hginga_ip = 0;
3171   state->dsw_sel = data;
3172   state->keyb = 0;
29803173
2981   memory_set_bankptr(space->machine, "bank1", &rom[0x10000 + 0x8000 * (data & 0x07)]);
2982   memory_set_bankptr(space->machine, "bank2", &rom[0x50000 + 0x1000 * ((data & 0xe0) >> 5)]);
3174   memory_set_bank(space->machine, "bank1", data & 0x07);
3175   memory_set_bank(space->machine, "bank2", ((data & 0xe0) >> 5));
29833176}
29843177
29853178
29863179static READ8_HANDLER( hparadis_input_r )
29873180{
3181   dynax_state *state = (dynax_state *)space->machine->driver_data;
29883182   static const char *const keynames0[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4" };
29893183   static const char *const keynames1[] = { "KEY5", "KEY6", "KEY7", "KEY8", "KEY9" };
29903184
2991   switch (hginga_select)
3185   switch (state->input_sel)
29923186   {
29933187      case 0x00:   return input_port_read(space->machine, "P1");
29943188      case 0x01:   return input_port_read(space->machine, "P2");
29953189      case 0x02:   return input_port_read(space->machine, "SYSTEM");
29963190      case 0x0d:   return 0x00;
2997      case 0x80:   return input_port_read(space->machine, keynames0[hginga_ip++]);   // P1 (Keys)
2998      case 0x81:   return input_port_read(space->machine, keynames1[hginga_ip++]);   // P2 (Keys)
3191      case 0x80:   return input_port_read(space->machine, keynames0[state->keyb++]);   // P1 (Keys)
3192      case 0x81:   return input_port_read(space->machine, keynames1[state->keyb++]);   // P2 (Keys)
29993193   }
3000   logerror("%06x: warning, unknown bits read, hginga_select = %02x\n", cpu_get_pc(space->cpu), hginga_select);
3194   logerror("%06x: warning, unknown bits read, input_sel = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
30013195   return 0xff;
30023196}
30033197
30043198static READ8_HANDLER( hparadis_dsw_r )
30053199{
3006   if (!(ddenlovr_select & 0x01))   return input_port_read(space->machine, "DSW1");
3007   if (!(ddenlovr_select & 0x02))   return input_port_read(space->machine, "DSW2");
3008   if (!(ddenlovr_select & 0x04))   return 0xff;
3009   if (!(ddenlovr_select & 0x08))   return 0xff;
3010   if (!(ddenlovr_select & 0x10))   return input_port_read(space->machine, "DSW3");
3200   dynax_state *state = (dynax_state *)space->machine->driver_data;
3201
3202   if (!BIT(state->dsw_sel, 0))   return input_port_read(space->machine, "DSW1");
3203   if (!BIT(state->dsw_sel, 1))   return input_port_read(space->machine, "DSW2");
3204   if (!BIT(state->dsw_sel, 2))   return 0xff;
3205   if (!BIT(state->dsw_sel, 3))   return 0xff;
3206   if (!BIT(state->dsw_sel, 4))   return input_port_read(space->machine, "DSW3");
30113207   return 0xff;
30123208}
30133209
30143210static WRITE8_HANDLER( hparadis_coin_w )
30153211{
3016   switch ( hginga_select )
3212   dynax_state *state = (dynax_state *)space->machine->driver_data;
3213
3214   switch (state->input_sel)
30173215   {
30183216      case 0x0c:   coin_counter_w(space->machine, 0, data & 1);   break;
30193217      case 0x0d:   break;
30203218      default:
3021         logerror("%04x: coins_w with select = %02x, data = %02x\n",cpu_get_pc(space->cpu),hginga_select,data);
3219         logerror("%04x: coins_w with select = %02x, data = %02x\n",cpu_get_pc(space->cpu), state->input_sel, data);
30223220   }
30233221}
30243222
r7640r7641
30313229ADDRESS_MAP_END
30323230
30333231// the RTC seems unused
3034static ADDRESS_MAP_START( hparadis_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
3232static ADDRESS_MAP_START( hparadis_portmap, ADDRESS_SPACE_IO, 8 )
3233   ADDRESS_MAP_GLOBAL_MASK(0xff)
30353234   AM_RANGE(0x00, 0x01) AM_WRITE(rongrong_blitter_w)
30363235   AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
30373236   AM_RANGE(0x1b, 0x1b) AM_READWRITE(rongrong_blitter_busy_r, rongrong_blitter_busy_w)
r7640r7641
30603259
30613260static READ8_HANDLER( mjmywrld_coins_r )
30623261{
3063   switch( ddenlovr_select2 )
3262   dynax_state *state = (dynax_state *)space->machine->driver_data;
3263
3264   switch (state->input_sel)
30643265   {
30653266      case 0x80:   return input_port_read(space->machine, "SYSTEM");
30663267      case 0x81:   return 0x00;
r7640r7641
30683269      case 0x83:   return 0x00;
30693270   }
30703271
3071   logerror("%06x: warning, unknown bits read, ddenlovr_select2 = %02x\n", cpu_get_pc(space->cpu), ddenlovr_select2);
3272   logerror("%06x: warning, unknown bits read, input_sel = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
30723273
30733274   return 0xff;
30743275}
30753276
3076static ADDRESS_MAP_START( mjmywrld_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
3277static ADDRESS_MAP_START( mjmywrld_portmap, ADDRESS_SPACE_IO, 8 )
3278   ADDRESS_MAP_GLOBAL_MASK(0xff)
30773279   AM_RANGE(0x00, 0x01) AM_WRITE(mjmyster_blitter_w)
30783280   AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
30793281   AM_RANGE(0x1c, 0x1c) AM_WRITE(mjmyster_rambank_w)
r7640r7641
31053307                  Panel & Variety Akamaru Q Jousyou Dont-R
31063308***************************************************************************/
31073309
3108static UINT16 akamaru_protection1;
31093310static READ16_HANDLER( akamaru_protection1_r )
31103311{
3111   return (akamaru_protection1 & 0x0008) ? 0x0001 : 0x0000;
3312   dynax_state *state = (dynax_state *)space->machine->driver_data;
3313   return (state->prot_16 & 0x0008) ? 0x0001 : 0x0000;
31123314}
3315
31133316static WRITE16_HANDLER( akamaru_protection1_w )
31143317{
3318   dynax_state *state = (dynax_state *)space->machine->driver_data;
31153319   int bank;
3116   COMBINE_DATA( &akamaru_protection1 );
3320
3321   COMBINE_DATA(&state->prot_16);
31173322   // BCD number?
3118   bank = (((akamaru_protection1>>4)&0xf)%10) * 10 + ((akamaru_protection1&0xf)%10);
3119   okim6295_set_bank_base(devtag_get_device(space->machine, "oki"), bank * 0x40000);
3323   bank = (((state->prot_16 >> 4) & 0x0f) % 10) * 10 + ((state->prot_16 & 0x0f) % 10);
3324   okim6295_set_bank_base(state->oki, bank * 0x40000);
31203325
3121//  popmessage("bank $%0x (%d)",akamaru_protection1, bank);
3326//  popmessage("bank $%0x (%d)", state->prot_16, bank);
31223327}
31233328
3124
3125static UINT16 *akamaru_protection2;
31263329static READ16_HANDLER( akamaru_protection2_r )
31273330{
31283331   return 0x55;
31293332}
31303333
3131static UINT16 *akamaru_dsw_sel;
31323334static READ16_HANDLER( akamaru_dsw_r )
31333335{
3336   dynax_state *state = (dynax_state *)space->machine->driver_data;
31343337   UINT16 dsw = 0;
3135   if (akamaru_dsw_sel[1] == 0xff)   dsw |= input_port_read(space->machine, "DSW1");
3136   if (akamaru_dsw_sel[0] == 0xff)   dsw |= input_port_read(space->machine, "DSW2");
3338
3339   if (state->dsw_sel16[1] == 0xff)   dsw |= input_port_read(space->machine, "DSW1");
3340   if (state->dsw_sel16[0] == 0xff)   dsw |= input_port_read(space->machine, "DSW2");
31373341   return dsw;
31383342}
31393343
31403344static READ16_HANDLER( akamaru_blitter_r )
31413345{
3142   return ddenlovr_blitter_irq_flag << 6;   // bit 7 = 1 -> blitter busy
3346   dynax_state *state = (dynax_state *)space->machine->driver_data;
3347   return state->ddenlovr_blitter_irq_flag << 6;   // bit 7 = 1 -> blitter busy
31433348}
31443349
31453350static READ16_HANDLER( akamaru_e0010d_r )
r7640r7641
31723377   AM_RANGE(0xe00104, 0xe00105) AM_READ_PORT("SYSTEM")
31733378
31743379   AM_RANGE(0xe00106, 0xe00107) AM_READ(akamaru_protection2_r)
3175   AM_RANGE(0xe00108, 0xe0010b) AM_WRITEONLY AM_BASE(&akamaru_protection2)
3380   AM_RANGE(0xe00108, 0xe0010b) AM_WRITEONLY AM_BASE_MEMBER(dynax_state, protection2)
31763381
31773382   AM_RANGE(0xe0010c, 0xe0010d) AM_READ(akamaru_e0010d_r)
31783383   AM_RANGE(0xe00200, 0xe00201) AM_READ(akamaru_dsw_r)                              // DSW
r7640r7641
31803385   AM_RANGE(0xe00204, 0xe00205) AM_READ(akamaru_blitter_r)                           // Blitter Busy & IRQ
31813386   AM_RANGE(0xe00302, 0xe00303) AM_WRITE(ddenlovr_blitter_irq_ack_w)                  // Blitter irq acknowledge
31823387
3183   AM_RANGE(0xe00304, 0xe00307) AM_WRITEONLY AM_BASE( &akamaru_dsw_sel)            // DSW select
3388   AM_RANGE(0xe00304, 0xe00307) AM_WRITEONLY AM_BASE_MEMBER(dynax_state, dsw_sel16)            // DSW select
31843389   AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w)                     // Coin Counters
31853390   AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w)                     //
31863391
r7640r7641
31993404
32003405static WRITE8_HANDLER( mjflove_rombank_w )
32013406{
3202   UINT8 *rom = memory_region(space->machine, "maincpu");
3203   memory_set_bankptr(space->machine, "bank1", &rom[0x10000 + 0x8000 * (data & 0xf)]);
3407   memory_set_bank(space->machine, "bank1", data & 0xf);
32043408}
32053409
32063410static WRITE8_DEVICE_HANDLER( mjflove_okibank_w )
32073411{
32083412   okim6295_set_bank_base(device, (data & 0x07) * 0x40000);
3209//  popmessage("SOUND = %02x",data);
3413   //popmessage("SOUND = %02x", data);
32103414}
32113415
32123416static READ8_HANDLER( mjflove_protection_r )
r7640r7641
32163420
32173421static READ8_HANDLER( mjflove_keyb_r )
32183422{
3423   dynax_state *state = (dynax_state *)space->machine->driver_data;
32193424   UINT8 val = 0xff;
32203425
3221   if      (!(keyb & 0x01))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
3222   else if (!(keyb & 0x02))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
3223   else if (!(keyb & 0x04))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
3224   else if (!(keyb & 0x08))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
3225   else if (!(keyb & 0x10))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
3426   if      (!BIT(state->keyb, 0))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
3427   else if (!BIT(state->keyb, 1))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
3428   else if (!BIT(state->keyb, 2))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
3429   else if (!BIT(state->keyb, 3))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
3430   else if (!BIT(state->keyb, 4))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
32263431
32273432   return val;
32283433}
32293434
3230static UINT8 mjflove_irq_cause;
3231
32323435static CUSTOM_INPUT( mjflove_blitter_r )
32333436{
3437   dynax_state *state = (dynax_state *)field->port->machine->driver_data;
3438
32343439   // bit 7 = 1 -> blitter busy
32353440   // bit 6 = 0 -> VBLANK?
32363441   // bit 5 = 0 -> RTC?
3237   return mjflove_irq_cause;
3442   return state->mjflove_irq_cause;
32383443}
32393444
32403445static WRITE8_HANDLER( mjflove_blitter_w )
32413446{
3242   blitter_w(space, 0,offset,data,0);
3447   blitter_w(space, 0, offset, data, 0);
32433448}
32443449
32453450static WRITE8_HANDLER( mjflove_coincounter_w )
32463451{
32473452   // bit 0 = in counter
3248   coin_counter_w(space->machine, 0, data   & 0x01);
3453   coin_counter_w(space->machine, 0, data & 0x01);
32493454
32503455   if (data & 0xfe)
32513456   {
32523457      logerror("%04x: warning, coin counter = %02x\n", cpu_get_pc(space->cpu), data);
3253//      popmessage("COIN = %02x",data);
3458//      popmessage("COIN = %02x", data);
32543459   }
32553460}
32563461
r7640r7641
32953500
32963501static WRITE8_HANDLER( jongtei_dsw_keyb_w )
32973502{
3298   dsw = data;
3299   keyb = data;
3503   dynax_state *state = (dynax_state *)space->machine->driver_data;
3504   state->dsw_sel = data;
3505   state->keyb = data;
33003506}
33013507
33023508static READ8_HANDLER( jongtei_busy_r )
r7640r7641
33043510   return 0x04;   // !bit 2 = blitter busy
33053511}
33063512
3307static ADDRESS_MAP_START( jongtei_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
3513static ADDRESS_MAP_START( jongtei_portmap, ADDRESS_SPACE_IO, 8 )
3514   ADDRESS_MAP_GLOBAL_MASK(0xff)
33083515   AM_RANGE(0x2c, 0x2c) AM_READ(jongtei_busy_r) AM_DEVWRITE("oki", jongtei_okibank_w)
33093516   AM_RANGE(0x2e, 0x2e) AM_WRITE(hanakanz_blitter_reg_w)
33103517   AM_RANGE(0x30, 0x30) AM_WRITE(hanakanz_rombank_w)
r7640r7641
33373544
33383545static READ8_HANDLER( sryudens_keyb_r )
33393546{
3547   dynax_state *state = (dynax_state *)space->machine->driver_data;
33403548   UINT8 val = 0x3f;
33413549
3342   if      (!(keyb & 0x01))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
3343   else if (!(keyb & 0x02))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
3344   else if (!(keyb & 0x04))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
3345   else if (!(keyb & 0x08))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
3346   else if (!(keyb & 0x10))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
3550   if      (!BIT(state->keyb, 0))   val = input_port_read(space->machine, offset ? "KEY5" : "KEY0");
3551   else if (!BIT(state->keyb, 1))   val = input_port_read(space->machine, offset ? "KEY6" : "KEY1");
3552   else if (!BIT(state->keyb, 2))   val = input_port_read(space->machine, offset ? "KEY7" : "KEY2");
3553   else if (!BIT(state->keyb, 3))   val = input_port_read(space->machine, offset ? "KEY8" : "KEY3");
3554   else if (!BIT(state->keyb, 4))   val = input_port_read(space->machine, offset ? "KEY9" : "KEY4");
33473555
33483556   val |= input_port_read(space->machine, offset ? "HOPPER" : "BET");
3349   if (offset)   val &= 0x7f;   // bit 7 = blitter busy
3557   if (offset)
3558      val &= 0x7f;   // bit 7 = blitter busy
33503559   return val;
33513560}
33523561
r7640r7641
33643573      logerror("%04x: warning, coin counter = %02x\n", cpu_get_pc(space->cpu), data);
33653574
33663575#ifdef MAME_DEBUG
3367//  popmessage("COIN = %02x",data);
3576//  popmessage("COIN = %02x", data);
33683577#endif
33693578}
33703579
33713580static WRITE8_HANDLER( sryudens_rambank_w )
33723581{
3373   UINT8 *rom = memory_region(space->machine, "maincpu");
3374   memory_set_bankptr(space->machine, "bank2", &rom[0x90000 + 0x1000 * (data & 0x0f)]);
3375//  logerror("%04x: rambank = %02x\n", cpu_get_pc(space->cpu), data);
3582   memory_set_bank(space->machine, "bank2", data & 0x0f);
3583   //logerror("%04x: rambank = %02x\n", cpu_get_pc(space->cpu), data);
33763584}
33773585
3378static ADDRESS_MAP_START( sryudens_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
3586static ADDRESS_MAP_START( sryudens_portmap, ADDRESS_SPACE_IO, 8 )
3587   ADDRESS_MAP_GLOBAL_MASK(0xff)
33793588   AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("oki", okim6295_r, okim6295_w)
33803589   AM_RANGE(0x02, 0x03) AM_DEVWRITE("ymsnd", ym2413_w)
33813590   AM_RANGE(0x04, 0x05) AM_DEVWRITE("aysnd", ay8910_address_data_w)
r7640r7641
34123621
34133622static READ8_HANDLER( daimyojn_keyb1_r )
34143623{
3624   dynax_state *state = (dynax_state *)space->machine->driver_data;
34153625   UINT8 val = 0x3f;
34163626
3417   if      (!(keyb & 0x01))   val = input_port_read(space->machine, "KEY0");
3418   else if (!(keyb & 0x02))   val = input_port_read(space->machine, "KEY1");
3419   else if (!(keyb & 0x04))   val = input_port_read(space->machine, "KEY2");
3420   else if (!(keyb & 0x08))   val = input_port_read(space->machine, "KEY3");
3421   else if (!(keyb & 0x10))   val = input_port_read(space->machine, "KEY4");
3627   if      (!BIT(state->keyb, 0))  val = input_port_read(space->machine, "KEY0");
3628   else if (!BIT(state->keyb, 1))  val = input_port_read(space->machine, "KEY1");
3629   else if (!BIT(state->keyb, 2))  val = input_port_read(space->machine, "KEY2");
3630   else if (!BIT(state->keyb, 3))  val = input_port_read(space->machine, "KEY3");
3631   else if (!BIT(state->keyb, 4))  val = input_port_read(space->machine, "KEY4");
34223632
34233633   val |= input_port_read(space->machine, "BET");
34243634   return val;
34253635}
3636
34263637static READ8_HANDLER( daimyojn_keyb2_r )
34273638{
3639   dynax_state *state = (dynax_state *)space->machine->driver_data;
34283640   UINT8 val = 0x3f;
34293641
3430   if      (!(keyb & 0x01))   val = input_port_read(space->machine, "KEY5");
3431   else if (!(keyb & 0x02))   val = input_port_read(space->machine, "KEY6");
3432   else if (!(keyb & 0x04))   val = input_port_read(space->machine, "KEY7");
3433   else if (!(keyb & 0x08))   val = input_port_read(space->machine, "KEY8");
3434   else if (!(keyb & 0x10))   val = input_port_read(space->machine, "KEY9");
3642   if      (!BIT(state->keyb, 0))  val = input_port_read(space->machine, "KEY5");
3643   else if (!BIT(state->keyb, 1))  val = input_port_read(space->machine, "KEY6");
3644   else if (!BIT(state->keyb, 2))  val = input_port_read(space->machine, "KEY7");
3645   else if (!BIT(state->keyb, 3))  val = input_port_read(space->machine, "KEY8");
3646   else if (!BIT(state->keyb, 4))  val = input_port_read(space->machine, "KEY9");
34353647
34363648   val |= input_port_read(space->machine, "HOPPER");
34373649   return val;
r7640r7641
34393651
34403652// 1B18: D4 ED 76 C9 CB
34413653// 1B1D: 96 AF 34 8B 89
3442static UINT8 daimyojn_protection_val;
34433654
34443655static WRITE8_HANDLER( daimyojn_protection_w )
34453656{
3446   daimyojn_protection_val = data;
3657   dynax_state *state = (dynax_state *)space->machine->driver_data;
3658   state->prot_val = data;
34473659}
34483660
34493661static READ8_HANDLER( daimyojn_protection_r )
34503662{
3451   switch (daimyojn_protection_val)
3663   dynax_state *state = (dynax_state *)space->machine->driver_data;
3664   switch (state->prot_val)
34523665   {
34533666      case 0xd4:   return 0x96;
34543667      case 0xed:   return 0xaf;
r7640r7641
34643677   okim6295_set_bank_base(device, ((data >> 4) & 0x01) * 0x40000);
34653678}
34663679
3467static UINT8 daimyojn_palette_sel;
34683680static WRITE8_HANDLER( daimyojn_palette_sel_w )
34693681{
3470   daimyojn_palette_sel = data;
3682   dynax_state *state = (dynax_state *)space->machine->driver_data;
3683   state->daimyojn_palette_sel = data;
34713684}
34723685
34733686static WRITE8_HANDLER( daimyojn_blitter_data_palette_w )
34743687{
3475   if (daimyojn_palette_sel & 0x01)
3688   dynax_state *state = (dynax_state *)space->machine->driver_data;
3689
3690   if (state->daimyojn_palette_sel & 0x01)
34763691      hanakanz_palette_w(space, offset, data);
34773692   else
34783693      hanakanz_blitter_data_w(space, offset, data);
r7640r7641
34843699   return offset ? 1 : 0;   // year = 0x10 (BCD)
34853700}
34863701
3487static ADDRESS_MAP_START( daimyojn_portmap, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
3702static ADDRESS_MAP_START( daimyojn_portmap, ADDRESS_SPACE_IO, 8 )
3703   ADDRESS_MAP_GLOBAL_MASK(0xff)
34883704   AM_RANGE(0x2c, 0x2c) AM_READ(jongtei_busy_r) AM_DEVWRITE("oki", daimyojn_okibank_w)
34893705   AM_RANGE(0x2e, 0x2e) AM_WRITE(daimyojn_palette_sel_w)
34903706   AM_RANGE(0x30, 0x30) AM_WRITE(hanakanz_blitter_reg_w)
r7640r7641
73357551
73367552
73377553/***************************************************************************
7554
7555
7556                                Machine Drivers
7557
7558
7559***************************************************************************/
7560
7561static MACHINE_START( ddenlovr )
7562{
7563   dynax_state *state = (dynax_state *)machine->driver_data;
7564
7565   state->maincpu = devtag_get_device(machine, "maincpu");
7566   state->soundcpu = devtag_get_device(machine, "soundcpu");
7567   state->oki = devtag_get_device(machine, "oki");
7568
7569   state_save_register_global(machine, state->input_sel);
7570   state_save_register_global(machine, state->dsw_sel);
7571   state_save_register_global(machine, state->keyb);
7572   state_save_register_global(machine, state->coins);
7573   state_save_register_global(machine, state->hopper);
7574
7575   state_save_register_global(machine, state->okibank);
7576   state_save_register_global(machine, state->rongrong_blitter_busy_select);
7577
7578   state_save_register_global(machine, state->prot_val);
7579   state_save_register_global(machine, state->prot_16);
7580   state_save_register_global_array(machine, state->quiz365_protection);
7581
7582   state_save_register_global(machine, state->mmpanic_leds);
7583   state_save_register_global(machine, state->funkyfig_lockout);
7584   state_save_register_global_array(machine, state->romdata);
7585   state_save_register_global(machine, state->palette_index);
7586   state_save_register_global(machine, state->hginga_rombank);
7587   state_save_register_global(machine, state->mjflove_irq_cause);
7588   state_save_register_global(machine, state->daimyojn_palette_sel);
7589   state_save_register_global_array(machine, state->palram);
7590
7591   state_save_register_global(machine, state->irq_count);
7592}
7593
7594static MACHINE_RESET( ddenlovr )
7595{
7596   dynax_state *state = (dynax_state *)machine->driver_data;
7597
7598   state->input_sel = 0;
7599   state->dsw_sel = 0;
7600   state->keyb = 0;
7601   state->coins = 0;
7602   state->hopper = 0;
7603
7604   state->okibank = 0;
7605   state->rongrong_blitter_busy_select = 0;
7606   state->prot_val = 0;
7607   state->prot_16 = 0;
7608   state->mmpanic_leds = 0;
7609   state->funkyfig_lockout = 0;
7610   state->palette_index = 0;
7611   state->hginga_rombank = 0;
7612   state->mjflove_irq_cause = 0;
7613   state->daimyojn_palette_sel = 0;
7614   state->irq_count = 0;
7615
7616   state->quiz365_protection[0] = 0;
7617   state->quiz365_protection[1] = 0;
7618   state->romdata[0] = 0;
7619   state->romdata[1] = 0;
7620
7621   memset(state->palram, 0, ARRAY_LENGTH(state->palram));
7622}
7623
7624static MACHINE_START( rongrong )
7625{
7626   UINT8 *ROM = memory_region(machine, "maincpu");
7627   memory_configure_bank(machine, "bank1", 0, 0x20, &ROM[0x010000], 0x8000);
7628   memory_configure_bank(machine, "bank2", 0, 8,    &ROM[0x110000], 0x1000);
7629
7630   MACHINE_START_CALL(ddenlovr);
7631}
7632
7633static MACHINE_START( mmpanic )
7634{
7635   UINT8 *ROM = memory_region(machine, "maincpu");
7636   memory_configure_bank(machine, "bank1", 0, 8,    &ROM[0x10000], 0x8000);
7637
7638   MACHINE_START_CALL(ddenlovr);
7639}
7640
7641static MACHINE_START( funkyfig )
7642{
7643   UINT8 *ROM = memory_region(machine, "maincpu");
7644   memory_configure_bank(machine, "bank1", 0, 0x10, &ROM[0x10000], 0x8000);
7645   memory_configure_bank(machine, "bank2", 0, 8,    &ROM[0x90000], 0x1000);
7646
7647   MACHINE_START_CALL(ddenlovr);
7648}
7649
7650static MACHINE_START( hanakanz )
7651{
7652   UINT8 *ROM = memory_region(machine, "maincpu");
7653   memory_configure_bank(machine, "bank1", 0, 0x10, &ROM[0x10000], 0x8000);
7654   memory_configure_bank(machine, "bank2", 0, 0x10, &ROM[0x90000], 0x1000);
7655
7656   MACHINE_START_CALL(ddenlovr);
7657}
7658
7659static MACHINE_START( mjmyster )
7660{
7661   UINT8 *ROM = memory_region(machine, "maincpu");
7662   memory_configure_bank(machine, "bank1", 0, 8,    &ROM[0x10000], 0x8000);
7663   memory_configure_bank(machine, "bank2", 0, 8,    &ROM[0x90000], 0x1000);
7664
7665   MACHINE_START_CALL(ddenlovr);
7666}
7667
7668static MACHINE_START( hparadis )
7669{
7670   UINT8 *ROM = memory_region(machine, "maincpu");
7671   memory_configure_bank(machine, "bank1", 0, 8,    &ROM[0x10000], 0x8000);
7672   memory_configure_bank(machine, "bank2", 0, 8,    &ROM[0x50000], 0x1000);
7673
7674   MACHINE_START_CALL(ddenlovr);
7675}
7676
7677static MACHINE_START( mjflove )
7678{
7679   UINT8 *ROM = memory_region(machine, "maincpu");
7680   memory_configure_bank(machine, "bank1", 0, 0x10, &ROM[0x10000], 0x8000);
7681   memory_configure_bank(machine, "bank2", 0, 8,    &ROM[0x90000], 0x1000);
7682
7683   MACHINE_START_CALL(ddenlovr);
7684}
7685
7686static MACHINE_START( sryudens )
7687{
7688   UINT8 *ROM = memory_region(machine, "maincpu");
7689   memory_configure_bank(machine, "bank1", 0, 0x10, &ROM[0x10000], 0x8000);
7690   memory_configure_bank(machine, "bank2", 0, 0x10, &ROM[0x90000], 0x1000);
7691
7692   MACHINE_START_CALL(ddenlovr);
7693}
7694
7695/***************************************************************************
73387696                            Don Den Lover Vol.1
73397697***************************************************************************/
73407698
73417699static MACHINE_DRIVER_START( ddenlovr )
73427700
7701   /* driver data */
7702   MDRV_DRIVER_DATA(dynax_state)
7703
73437704   /* basic machine hardware */
73447705   MDRV_CPU_ADD("maincpu",M68000, XTAL_24MHz / 2)
73457706   MDRV_CPU_PROGRAM_MAP(ddenlovr_map)
73467707   MDRV_CPU_VBLANK_INT("screen", irq1_line_hold)
73477708
7709   MDRV_MACHINE_START(ddenlovr)
7710   MDRV_MACHINE_RESET(ddenlovr)
7711
73487712   /* video hardware */
73497713   MDRV_SCREEN_ADD("screen", RASTER)
73507714   MDRV_SCREEN_REFRESH_RATE(60)
r7640r7641
74427806 */
74437807static INTERRUPT_GEN( quizchq_irq )
74447808{
7445   static int count;
7809   dynax_state *state = (dynax_state *)device->machine->driver_data;
74467810
74477811   /* I haven't found a irq ack register, so I need this kludge to
74487812       make sure I don't lose any interrupt generated by the blitter,
r7640r7641
74507814   if (device->get_runtime_int(CPUINFO_INT_INPUT_STATE + 0))
74517815      return;
74527816
7453   if ((++count % 60) == 0)
7817   if ((++state->irq_count % 60) == 0)
74547818      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xfc);
74557819   else
74567820      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xee);
r7640r7641
74657829
74667830static MACHINE_DRIVER_START( quizchq )
74677831
7832   /* driver data */
7833   MDRV_DRIVER_DATA(dynax_state)
7834
74687835   /* basic machine hardware */
74697836   MDRV_CPU_ADD("maincpu", Z80, 8000000)   /* ? */
74707837   MDRV_CPU_PROGRAM_MAP(quizchq_map)
74717838   MDRV_CPU_IO_MAP(quizchq_portmap)
74727839   MDRV_CPU_VBLANK_INT("screen", quizchq_irq)
74737840
7841   MDRV_MACHINE_START(rongrong)
7842   MDRV_MACHINE_RESET(ddenlovr)
7843
74747844   /* video hardware */
74757845   MDRV_SCREEN_ADD("screen", RASTER)
74767846   MDRV_SCREEN_REFRESH_RATE(60)
r7640r7641
75227892 */
75237893static INTERRUPT_GEN( mmpanic_irq )
75247894{
7525   static int count;
7895   dynax_state *state = (dynax_state *)device->machine->driver_data;
75267896
75277897   /* I haven't found a irq ack register, so I need this kludge to
75287898       make sure I don't lose any interrupt generated by the blitter,
r7640r7641
75307900   if (device->get_runtime_int(CPUINFO_INT_INPUT_STATE + 0))
75317901      return;
75327902
7533   if ((++count % 60) == 0)
7903   if ((++state->irq_count % 60) == 0)
75347904      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xe7);   // RST 20, clock
75357905   else
75367906      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xcf);   // RST 08, vblank
r7640r7641
75387908
75397909static MACHINE_DRIVER_START( mmpanic )
75407910
7911   /* driver data */
7912   MDRV_DRIVER_DATA(dynax_state)
7913
75417914   /* basic machine hardware */
75427915   MDRV_CPU_ADD("maincpu", Z80, 8000000)
75437916   MDRV_CPU_PROGRAM_MAP(mmpanic_map)
r7640r7641
75497922   MDRV_CPU_IO_MAP(mmpanic_sound_portmap)
75507923   MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)   // NMI by main cpu
75517924
7925   MDRV_MACHINE_START(mmpanic)
7926   MDRV_MACHINE_RESET(ddenlovr)
7927
75527928   /* video hardware */
75537929   MDRV_SCREEN_ADD("screen", RASTER)
75547930   MDRV_SCREEN_REFRESH_RATE(60)
r7640r7641
75947970 */
75957971static INTERRUPT_GEN( hanakanz_irq )
75967972{
7597   static int count;
7973   dynax_state *state = (dynax_state *)device->machine->driver_data;
75987974
75997975   /* I haven't found a irq ack register, so I need this kludge to
76007976       make sure I don't lose any interrupt generated by the blitter,
r7640r7641
76027978   if (device->get_runtime_int(CPUINFO_INT_INPUT_STATE + 0))
76037979      return;
76047980
7605   if ((++count % 60) == 0)
7981   if ((++state->irq_count % 60) == 0)
76067982      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xe2);
76077983   else
76087984      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xe0);
r7640r7641
76107986
76117987static MACHINE_DRIVER_START( hanakanz )
76127988
7989   /* driver data */
7990   MDRV_DRIVER_DATA(dynax_state)
7991
76137992   /* basic machine hardware */
76147993   MDRV_CPU_ADD("maincpu",Z80,8000000)   // TMPZ84C015BF-8
76157994   MDRV_CPU_PROGRAM_MAP(hanakanz_map)
76167995   MDRV_CPU_IO_MAP(hanakanz_portmap)
76177996   MDRV_CPU_VBLANK_INT("screen", hanakanz_irq)
76187997
7998   MDRV_MACHINE_START(hanakanz)
7999   MDRV_MACHINE_RESET(ddenlovr)
8000
76198001   /* video hardware */
76208002   MDRV_SCREEN_ADD("screen", RASTER)
76218003   MDRV_SCREEN_REFRESH_RATE(60)
r7640r7641
76708052 */
76718053static INTERRUPT_GEN( mjchuuka_irq )
76728054{
7673   static int count;
8055   dynax_state *state = (dynax_state *)device->machine->driver_data;
76748056
76758057   /* I haven't found a irq ack register, so I need this kludge to
76768058       make sure I don't lose any interrupt generated by the blitter,
r7640r7641
76788060   if (device->get_runtime_int(CPUINFO_INT_INPUT_STATE + 0))
76798061      return;
76808062
7681   if ((++count % 60) == 0)
8063   if ((++state->irq_count % 60) == 0)
76828064      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xfa);
76838065   else
76848066      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xf8);
r7640r7641
77058087   MDRV_CPU_IO_MAP(funkyfig_portmap)
77068088   MDRV_CPU_VBLANK_INT("screen", mjchuuka_irq)
77078089
8090   MDRV_MACHINE_START(funkyfig)
8091
77088092   MDRV_CPU_MODIFY("soundcpu")
77098093   MDRV_CPU_IO_MAP(funkyfig_sound_portmap)
77108094
r7640r7641
77368120   if (device->get_runtime_int(CPUINFO_INT_INPUT_STATE + 0))
77378121      return;
77388122
7739   switch( cpu_getiloops(device) )
8123   switch (cpu_getiloops(device))
77408124   {
77418125      case 0:   cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xf8);   break;
77428126      case 1:   cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xfa);   break;
r7640r7641
77678151   MDRV_CPU_VBLANK_INT_HACK(mjmyster_irq, 2)
77688152   MDRV_CPU_PERIODIC_INT(rtc_nmi_irq, 1)
77698153
8154   MDRV_MACHINE_START(mjmyster)
8155
77708156   MDRV_SOUND_ADD("aysnd", AY8910, 3579545)
77718157   MDRV_SOUND_CONFIG(mjmyster_ay8910_interface)
77728158   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
r7640r7641
77848170 */
77858171static INTERRUPT_GEN( hginga_irq )
77868172{
7787   static int count;
8173   dynax_state *state = (dynax_state *)device->machine->driver_data;
77888174
77898175   /* I haven't found a irq ack register, so I need this kludge to
77908176       make sure I don't lose any interrupt generated by the blitter,
r7640r7641
77928178   if (device->get_runtime_int(CPUINFO_INT_INPUT_STATE + 0))
77938179      return;
77948180
7795   if ((++count % 60) == 0)
8181   if ((++state->irq_count % 60) == 0)
77968182      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xee);
77978183   else
77988184      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xf8);
r7640r7641
78158201   MDRV_CPU_IO_MAP(hginga_portmap)
78168202   MDRV_CPU_VBLANK_INT("screen", hginga_irq)
78178203
8204   MDRV_MACHINE_START(mjmyster)
8205
78188206   MDRV_SOUND_ADD("aysnd", AY8910, 3579545)
78198207   MDRV_SOUND_CONFIG(hginga_ay8910_interface)
78208208   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
r7640r7641
78288216   MDRV_CPU_IO_MAP(hgokou_portmap)
78298217   MDRV_CPU_VBLANK_INT("screen", hginga_irq)
78308218
8219   MDRV_MACHINE_START(mjmyster)
8220
78318221   MDRV_SOUND_ADD("aysnd", AY8910, 3579545)
78328222   MDRV_SOUND_CONFIG(hginga_ay8910_interface)
78338223   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
r7640r7641
78508240   MDRV_CPU_VBLANK_INT_HACK(mjmyster_irq, 2)
78518241   MDRV_CPU_PERIODIC_INT(rtc_nmi_irq, 1)
78528242
8243   MDRV_MACHINE_START(mjmyster)
8244
78538245   MDRV_SOUND_ADD("aysnd", AY8910, 1789772)
78548246   MDRV_SOUND_CONFIG(mjmyster_ay8910_interface)
78558247   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
r7640r7641
78638255   MDRV_CPU_VBLANK_INT_HACK(mjmyster_irq, 2)
78648256   MDRV_CPU_PERIODIC_INT(rtc_nmi_irq, 1)
78658257
8258   MDRV_MACHINE_START(mjmyster)
8259
78668260   MDRV_SOUND_ADD("aysnd", AY8910, 1789772)
78678261   MDRV_SOUND_CONFIG(mjmyster_ay8910_interface)
78688262   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
r7640r7641
78708264
78718265static INTERRUPT_GEN( mjflove_irq )
78728266{
7873   mjflove_irq_cause = 1 | (1 << 1);
8267   dynax_state *state = (dynax_state *)device->machine->driver_data;
78748268
8269   state->mjflove_irq_cause = 1 | (1 << 1);
8270
78758271   switch (cpu_getiloops(device))
78768272   {
78778273      case 0:
7878         mjflove_irq_cause &= 1;
8274         state->mjflove_irq_cause &= 1;
78798275         cpu_set_input_line(device, 0, HOLD_LINE);
78808276         break;
78818277      case 1:
7882         mjflove_irq_cause &= 1 << 1;
8278         state->mjflove_irq_cause &= 1 << 1;
78838279         cpu_set_input_line(device, 0, HOLD_LINE);
78848280         break;
78858281   }
r7640r7641
78938289   MDRV_CPU_IO_MAP(mjflove_portmap)
78948290   MDRV_CPU_VBLANK_INT_HACK(mjflove_irq, 2)
78958291
8292   MDRV_MACHINE_START(mjflove)
8293
78968294   MDRV_VIDEO_START(mjflove)   // blitter commands in the roms are shuffled around
78978295
78988296   MDRV_SOUND_ADD("aysnd", AY8910, 28636363/8)
r7640r7641
79138311   MDRV_CPU_PROGRAM_MAP(hparadis_map)
79148312   MDRV_CPU_IO_MAP(hparadis_portmap)
79158313   MDRV_CPU_VBLANK_INT("screen", hparadis_irq)
8314
8315   MDRV_MACHINE_START(hparadis)
79168316MACHINE_DRIVER_END
79178317
79188318static MACHINE_DRIVER_START( jongtei )
79198319
8320   /* driver data */
8321   MDRV_DRIVER_DATA(dynax_state)
8322
79208323   /* basic machine hardware */
79218324   MDRV_CPU_ADD("maincpu",Z80, XTAL_20MHz / 2)   // ?
79228325   MDRV_CPU_PROGRAM_MAP(hanakanz_map)
79238326   MDRV_CPU_IO_MAP(jongtei_portmap)
79248327   MDRV_CPU_VBLANK_INT("screen", hanakanz_irq)
79258328
8329   MDRV_MACHINE_START(hanakanz)
8330   MDRV_MACHINE_RESET(ddenlovr)
8331
79268332   /* video hardware */
79278333   MDRV_SCREEN_ADD("screen", RASTER)
79288334   MDRV_SCREEN_REFRESH_RATE(60)
r7640r7641
79578363
79588364static MACHINE_DRIVER_START( sryudens )
79598365
8366   /* driver data */
8367   MDRV_DRIVER_DATA(dynax_state)
8368
79608369   /* basic machine hardware */
79618370   MDRV_CPU_ADD("maincpu",Z80, XTAL_16MHz / 2)   // ?
79628371   MDRV_CPU_PROGRAM_MAP(sryudens_map)
79638372   MDRV_CPU_IO_MAP(sryudens_portmap)
79648373   MDRV_CPU_VBLANK_INT("screen", mjchuuka_irq)
79658374
8375   MDRV_MACHINE_START(sryudens)
8376   MDRV_MACHINE_RESET(ddenlovr)
8377
79668378   /* video hardware */
79678379   MDRV_SCREEN_ADD("screen", RASTER)
79688380   MDRV_SCREEN_REFRESH_RATE(60.8532)   // VSync 60.8532Hz, HSync 15.2790kHz
r7640r7641
80008412
80018413static MACHINE_DRIVER_START( daimyojn )
80028414
8415   /* driver data */
8416   MDRV_DRIVER_DATA(dynax_state)
8417
80038418   /* basic machine hardware */
80048419   MDRV_CPU_ADD("maincpu",Z80, XTAL_20MHz / 2)
80058420   MDRV_CPU_PROGRAM_MAP(hanakanz_map)
80068421   MDRV_CPU_IO_MAP(daimyojn_portmap)
80078422   MDRV_CPU_VBLANK_INT("screen", hanakanz_irq)
80088423
8424   MDRV_MACHINE_START(mjflove)
8425   MDRV_MACHINE_RESET(ddenlovr)
8426
80098427   /* video hardware */
80108428   MDRV_SCREEN_ADD("screen", RASTER)
80118429   MDRV_SCREEN_REFRESH_RATE(59.7922)   // HSync 15.4248kHz
r7640r7641
975210170ROM_END
975310171
975410172
9755GAME( 1992, mmpanic,  0,        mmpanic,  mmpanic,  0,        ROT0, "Nakanihon + East Technology (Taito license)", "Monkey Mole Panic (USA)",                                         GAME_NO_COCKTAIL )
9756GAME( 1993, funkyfig, 0,        funkyfig, funkyfig, 0,        ROT0, "Nakanihon + East Technology (Taito license)", "The First Funky Fighter",                                         GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) // scrolling, priority?
9757GAME( 1993, quizchq,  0,        quizchq,  quizchq,  0,        ROT0, "Nakanihon",                                   "Quiz Channel Question (Ver 1.00) (Japan)",                        GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
9758GAME( 1993, quizchql, quizchq,  quizchq,  quizchq,  0,        ROT0, "Nakanihon (Laxan license)",                   "Quiz Channel Question (Ver 1.23) (Taiwan?)",                      GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
9759GAME( 1993, animaljr, 0,        mmpanic,  animaljr, 0,        ROT0, "Nakanihon + East Technology (Taito license)", "Animalandia Jr.",                                                 GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND )
9760GAME( 1994, hginga,   0,        hginga,   hginga,   0,        ROT0, "Dynax",                                       "Hanafuda Hana Ginga",                                             GAME_NO_COCKTAIL )
9761GAME( 1994, mjmyster, 0,        mjmyster, mjmyster, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious World (set 1)",                            GAME_NO_COCKTAIL )
9762GAME( 1994, mjmywrld, mjmyster, mjmywrld, mjmyster, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious World (set 2)",                            GAME_NO_COCKTAIL )
9763GAME( 1994, mjmyornt, 0,        mjmyornt, mjmyornt, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious Orient",                                   GAME_NO_COCKTAIL )
9764GAME( 1994, mjmyuniv, 0,        mjmyuniv, mjmyster, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious Universe",                                 GAME_NO_COCKTAIL )
9765GAME( 1994, quiz365,  0,        quiz365,  quiz365,  0,        ROT0, "Nakanihon",                                   "Quiz 365 (Japan)",                                                GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION )
9766GAME( 1994, quiz365t, quiz365,  quiz365,  quiz365,  0,        ROT0, "Nakanihon + Taito",                           "Quiz 365 (Hong Kong & Taiwan)",                                   GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION )
9767GAME( 1994, rongrong, 0,        rongrong, rongrong, rongrong, ROT0, "Nakanihon (Activision licence)",              "Puzzle Game Rong Rong (Europe)",                                  GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS )
9768GAME( 1994, rongrongj,rongrong, rongrong, rongrong, rongrong, ROT0, "Nakanihon (Activision licence)",              "Puzzle Game Rong Rong (Japan)",                                   GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS )
9769GAME( 1994, rongrongg,rongrong, rongrong, rongrong, rongrong, ROT0, "Nakanihon (Activision licence)",              "Puzzle Game Rong Rong (Germany)",                                 GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS )
9770GAME( 1994, hparadis, 0,        hparadis, hparadis, 0,        ROT0, "Dynax",                                       "Super Hana Paradise (Japan)",                                     GAME_NO_COCKTAIL )
9771GAME( 1995, hgokou,   0,        hgokou,   hgokou,   0,        ROT0, "Dynax (Alba licence)",                      "Hanafuda Hana Gokou (Japan)",                                     GAME_NO_COCKTAIL )
9772GAME( 1995, mjdchuka, 0,        mjchuuka, mjchuuka, 0,        ROT0, "Dynax",                                       "Mahjong The Dai Chuuka Ken (China, v. D111)",                     GAME_NO_COCKTAIL )
9773GAME( 1995, nettoqc,  0,        nettoqc,  nettoqc,  0,        ROT0, "Nakanihon",                                   "Nettoh Quiz Champion (Japan)",                                    GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS )
9774GAME( 1995, ddenlovj, 0,        ddenlovj, ddenlovj, 0,        ROT0, "Dynax",                                       "Don Den Lover Vol. 1 - Shiro Kuro Tsukeyo! (Japan)",              GAME_NO_COCKTAIL )
9775GAME( 1995, ddenlovrk,ddenlovj, ddenlovrk,ddenlovr, 0,        ROT0, "Dynax",                                       "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea)",          GAME_NO_COCKTAIL )
9776GAME( 1995, ddenlovrb,ddenlovj, ddenlovr, ddenlovr, 0,        ROT0, "[Dynax] (bootleg)",                           "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea, bootleg)", GAME_NO_COCKTAIL )
9777GAME( 1996, ddenlovr, ddenlovj, ddenlovr, ddenlovr, 0,        ROT0, "Dynax",                                       "Don Den Lover Vol. 1 (Hong Kong)",                                GAME_NO_COCKTAIL )
9778GAME( 1996, hanakanz, 0,        hanakanz, hanakanz, 0,        ROT0, "Dynax",                                       "Hana Kanzashi (Japan)",                                           GAME_NO_COCKTAIL )
9779GAME( 1996, akamaru,  0,        akamaru,  akamaru,  0,        ROT0, "Dynax (Nakanihon licence)",                   "Panel & Variety Akamaru Q Jousyou Dont-R",                        GAME_NO_COCKTAIL )
9780GAME( 1996, sryudens, 0,        sryudens, sryudens, 0,        ROT0, "Dynax / Face",                                "Mahjong Seiryu Densetsu (Japan, NM502)",                          GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
9781GAME( 1996, mjflove,  0,        mjflove,  mjflove,  0,        ROT0, "Nakanihon",                                   "Mahjong Fantasic Love (Japan)",                                   GAME_NO_COCKTAIL )
9782GAME( 1997, hkagerou, 0,        hkagerou, hkagerou, 0,        ROT0, "Nakanihon + Dynax",                           "Hana Kagerou [BET] (Japan)",                                      GAME_NO_COCKTAIL )
9783GAME( 1998, mjchuuka, 0,        mjchuuka, mjchuuka, 0,        ROT0, "Dynax",                                       "Mahjong Chuukanejyo (China)",                                     GAME_NO_COCKTAIL )
9784GAME( 1998, mjreach1, 0,        mjreach1, mjreach1, 0,        ROT0, "Nihon System",                                "Mahjong Reach Ippatsu (Japan)",                                   GAME_NO_COCKTAIL )
9785GAME( 1999, jongtei,  0,        jongtei,  jongtei,  0,        ROT0, "Dynax",                                       "Mahjong Jong-Tei (Japan, ver. NM532-01)",                         GAME_NO_COCKTAIL )
9786GAME( 2002, daimyojn, 0,        daimyojn, daimyojn, 0,        ROT0, "Dynax / Techno-Top / Techno-Planning",        "Mahjong Daimyojin (Japan, T017-PB-00)",                           GAME_NO_COCKTAIL )
10173GAME( 1992, mmpanic,   0,        mmpanic,   mmpanic,  0,        ROT0, "Nakanihon + East Technology (Taito license)", "Monkey Mole Panic (USA)",                                         GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10174GAME( 1993, funkyfig,  0,        funkyfig,  funkyfig, 0,        ROT0, "Nakanihon + East Technology (Taito license)", "The First Funky Fighter",                                         GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // scrolling, priority?
10175GAME( 1993, quizchq,   0,        quizchq,   quizchq,  0,        ROT0, "Nakanihon",                                   "Quiz Channel Question (Ver 1.00) (Japan)",                        GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
10176GAME( 1993, quizchql,  quizchq,  quizchq,   quizchq,  0,        ROT0, "Nakanihon (Laxan license)",                   "Quiz Channel Question (Ver 1.23) (Taiwan?)",                      GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
10177GAME( 1993, animaljr,  0,        mmpanic,   animaljr, 0,        ROT0, "Nakanihon + East Technology (Taito license)", "Animalandia Jr.",                                                 GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
10178GAME( 1994, hginga,    0,        hginga,    hginga,   0,        ROT0, "Dynax",                                       "Hanafuda Hana Ginga",                                             GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10179GAME( 1994, mjmyster,  0,        mjmyster,  mjmyster, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious World (set 1)",                            GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10180GAME( 1994, mjmywrld,  mjmyster, mjmywrld,  mjmyster, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious World (set 2)",                            GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10181GAME( 1994, mjmyornt,  0,        mjmyornt,  mjmyornt, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious Orient",                                   GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10182GAME( 1994, mjmyuniv,  0,        mjmyuniv,  mjmyster, 0,        ROT0, "Dynax",                                       "Mahjong The Mysterious Universe",                                 GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10183GAME( 1994, quiz365,   0,        quiz365,   quiz365,  0,        ROT0, "Nakanihon",                                   "Quiz 365 (Japan)",                                                GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION | GAME_SUPPORTS_SAVE )
10184GAME( 1994, quiz365t,  quiz365,  quiz365,   quiz365,  0,        ROT0, "Nakanihon + Taito",                           "Quiz 365 (Hong Kong & Taiwan)",                                   GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION | GAME_SUPPORTS_SAVE )
10185GAME( 1994, rongrong,  0,        rongrong,  rongrong, rongrong, ROT0, "Nakanihon (Activision licence)",              "Puzzle Game Rong Rong (Europe)",                                  GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
10186GAME( 1994, rongrongj, rongrong, rongrong,  rongrong, rongrong, ROT0, "Nakanihon (Activision licence)",              "Puzzle Game Rong Rong (Japan)",                                   GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
10187GAME( 1994, rongrongg, rongrong, rongrong,  rongrong, rongrong, ROT0, "Nakanihon (Activision licence)",              "Puzzle Game Rong Rong (Germany)",                                 GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
10188GAME( 1994, hparadis,  0,        hparadis,  hparadis, 0,        ROT0, "Dynax",                                       "Super Hana Paradise (Japan)",                                     GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10189GAME( 1995, hgokou,    0,        hgokou,    hgokou,   0,        ROT0, "Dynax (Alba licence)",                        "Hanafuda Hana Gokou (Japan)",                                     GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10190GAME( 1995, mjdchuka,  0,        mjchuuka,  mjchuuka, 0,        ROT0, "Dynax",                                       "Mahjong The Dai Chuuka Ken (China, v. D111)",                     GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10191GAME( 1995, nettoqc,   0,        nettoqc,   nettoqc,  0,        ROT0, "Nakanihon",                                   "Nettoh Quiz Champion (Japan)",                                    GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
10192GAME( 1995, ddenlovj,  0,        ddenlovj,  ddenlovj, 0,        ROT0, "Dynax",                                       "Don Den Lover Vol. 1 - Shiro Kuro Tsukeyo! (Japan)",              GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10193GAME( 1995, ddenlovrk, ddenlovj, ddenlovrk, ddenlovr, 0,        ROT0, "Dynax",                                       "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea)",          GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10194GAME( 1995, ddenlovrb, ddenlovj, ddenlovr,  ddenlovr, 0,        ROT0, "[Dynax] (bootleg)",                           "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea, bootleg)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10195GAME( 1996, ddenlovr,  ddenlovj, ddenlovr,  ddenlovr, 0,        ROT0, "Dynax",                                       "Don Den Lover Vol. 1 (Hong Kong)",                                GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10196GAME( 1996, hanakanz,  0,        hanakanz,  hanakanz, 0,        ROT0, "Dynax",                                       "Hana Kanzashi (Japan)",                                           GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10197GAME( 1996, akamaru,   0,        akamaru,   akamaru,  0,        ROT0, "Dynax (Nakanihon licence)",                   "Panel & Variety Akamaru Q Jousyou Dont-R",                        GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10198GAME( 1996, sryudens,  0,        sryudens,  sryudens, 0,        ROT0, "Dynax / Face",                                "Mahjong Seiryu Densetsu (Japan, NM502)",                          GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
10199GAME( 1996, mjflove,   0,        mjflove,   mjflove,  0,        ROT0, "Nakanihon",                                   "Mahjong Fantasic Love (Japan)",                                   GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10200GAME( 1997, hkagerou,  0,        hkagerou,  hkagerou, 0,        ROT0, "Nakanihon + Dynax",                           "Hana Kagerou [BET] (Japan)",                                      GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10201GAME( 1998, mjchuuka,  0,        mjchuuka,  mjchuuka, 0,        ROT0, "Dynax",                                       "Mahjong Chuukanejyo (China)",                                     GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10202GAME( 1998, mjreach1,  0,        mjreach1,  mjreach1, 0,        ROT0, "Nihon System",                                "Mahjong Reach Ippatsu (Japan)",                                   GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10203GAME( 1999, jongtei,   0,        jongtei,   jongtei,  0,        ROT0, "Dynax",                                       "Mahjong Jong-Tei (Japan, ver. NM532-01)",                         GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
10204GAME( 2002, daimyojn,  0,        daimyojn,  daimyojn, 0,        ROT0, "Dynax / Techno-Top / Techno-Planning",        "Mahjong Daimyojin (Japan, T017-PB-00)",                           GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
src/mame/drivers/scramble.c
r7640r7641
17691769
17701770ROM_START( hotshock )
17711771   ROM_REGION( 0x10000, "maincpu", 0 )
1772   ROM_LOAD( "0d.l10", 0x0000, 0x1000, CRC(3e8aeaeb) SHA1(0572623928d36d106c9d8028d92fbd02375291a5) )
1773   ROM_LOAD( "1d.l9",  0x1000, 0x1000, CRC(0eab3246) SHA1(fac21e341186a7b70893c48cc00b1209dc31bcca) )
1774   ROM_LOAD( "2d.l8",  0x2000, 0x1000, CRC(e646bde3) SHA1(a0349a096ea00c077d162a945e4797e164a1508f) )
1775   ROM_LOAD( "3d.l7",  0x3000, 0x1000, CRC(5bde9312) SHA1(d3ba06790c8210f41902bb8ad27a1e5abafccb33) )
1776
1777   ROM_REGION( 0x10000, "audiocpu", 0 )
1778   ROM_LOAD( "6d.b3",  0x0000, 0x1000, CRC(c5e02651) SHA1(105b28d28cad2cddfc0a32b5dec1d21d1ef3f663) )
1779   ROM_LOAD( "7d.b4",  0x1000, 0x1000, CRC(49dc113d) SHA1(c59642d6cbd6e9c54c9802b8ec550b106e6a3ec3) )
1780
1781   ROM_REGION( 0x2000, "gfx1", 0 )
1782   ROM_LOAD( "4d.h3",  0x0000, 0x1000, CRC(751c850e) SHA1(067aaea400bbbcb0819d74a24fba5d7e035c2466) )
1783   ROM_LOAD( "5d.h5",  0x1000, 0x1000, CRC(fc74282e) SHA1(9a7df0a972cba4ee3c317ef3617b1d69d516bebb) )
1784
1785   ROM_REGION( 0x0020, "proms", 0 )
1786   ROM_LOAD( "18s030.1k",    0x0000, 0x0020, CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) )
1787ROM_END
1788
1789ROM_START( hotshockb )
1790   ROM_REGION( 0x10000, "maincpu", 0 )
17721791   ROM_LOAD( "hotshock.l10", 0x0000, 0x1000, CRC(401078f7) SHA1(d4415a41eba1d3a2dcbb119f3136c177b02d1fb6) )
17731792   ROM_LOAD( "hotshock.l9",  0x1000, 0x1000, CRC(af76c237) SHA1(bb54e1652a2d2e56731434ed85b40dab4aad91c9) )
17741793   ROM_LOAD( "hotshock.l8",  0x2000, 0x1000, CRC(30486031) SHA1(bed06cb62afee6b000a0e21927559ac5d3538b38) )
r7640r7641
19651984GAME( 1983, mrkougar2,mrkougar, mrkougar, mrkougar, mrkougar,     ROT90, "ATW", "Mr. Kougar (earlier)", GAME_SUPPORTS_SAVE )
19661985GAME( 1983, mrkougb,  mrkougar, mrkougb,  mrkougar, mrkougb,      ROT90, "bootleg", "Mr. Kougar (bootleg set 1)", GAME_SUPPORTS_SAVE )
19671986GAME( 1983, mrkougb2, mrkougar, mrkougb,  mrkougar, mrkougb,      ROT90, "bootleg", "Mr. Kougar (bootleg set 2)", GAME_SUPPORTS_SAVE )
1968GAME( 1982, hotshock, 0,        hotshock, hotshock, hotshock,     ROT90, "E.G. Felaco", "Hot Shocker", GAME_SUPPORTS_SAVE )
1987GAME( 1982, hotshock, 0,        hotshock, hotshock, hotshock,     ROT90, "E.G. Felaco (Domino license)", "Hot Shocker", GAME_SUPPORTS_SAVE )
1988GAME( 1982, hotshockb,hotshock, hotshock, hotshock, hotshock,     ROT90, "bootleg", "Hot Shocker (bootleg)", GAME_SUPPORTS_SAVE )
19691989GAME( 1982, conquer,  0,        hotshock, hotshock, 0,            ROT90, "<unknown>", "Conquer", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE)
19701990GAME( 1983, hunchbks, hunchbak, hunchbks, hunchbks, scramble_ppi, ROT90, "Century Electronics", "Hunchback (Scramble hardware)", GAME_SUPPORTS_SAVE )
19711991GAME( 1984, hncholms, huncholy, hncholms, hncholms, scramble_ppi, ROT90, "Century Electronics", "Hunchback Olympic (Scramble hardware)", GAME_SUPPORTS_SAVE )
src/mame/drivers/namcos21.c
r7640r7641
17141714   MDRV_SOUND_ROUTE(1, "rspeaker", 0.30)
17151715MACHINE_DRIVER_END
17161716
1717ROM_START( aircombu )
1717ROM_START( aircomb )
17181718   ROM_REGION( 0x100000, "maincpu", 0 ) /* Master */
17191719   ROM_LOAD16_BYTE( "ac2-mpr-u.3j",  0x000000, 0x80000, CRC(a7133f85) SHA1(9f1c99dd503f1fc81096170fd272e33ae8a7de2f) )
17201720   ROM_LOAD16_BYTE( "ac2-mpr-l.1j",  0x000001, 0x80000, CRC(520a52e6) SHA1(74306e02abfe08aa1afbf325b74dbc0840c3ad3a) )
r7640r7641
18781878   ROM_LOAD("cy1-voi1.12c",0x080000,0x80000,CRC(2b335f06) SHA1(2b2cd407c34388b56496f84a414daa153780b098) )
18791879   ROM_LOAD("cy1-voi2.12d",0x100000,0x80000,CRC(10cd15f0) SHA1(9b721654ed97a13287373c1b2854ac9aeddc271f) )
18801880   ROM_LOAD("cy1-voi3.12e",0x180000,0x80000,CRC(c902b4a4) SHA1(816357ec1a02a7ebf817ac1182e9c50ce5ca71f6) )
1881
1882   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
1883   ROM_LOAD( "cybsled.nv",  0x000000, 0x2000, CRC(aa18bf9e) SHA1(3712d4d20e5f5f1c920e3f1f6a00101e874662d0) )
18811884ROM_END
18821885
18831886ROM_START( cybsledj )
r7640r7641
19321935   ROM_LOAD("cy1-voi1.12c",0x080000,0x80000,CRC(2b335f06) SHA1(2b2cd407c34388b56496f84a414daa153780b098) )
19331936   ROM_LOAD("cy1-voi2.12d",0x100000,0x80000,CRC(10cd15f0) SHA1(9b721654ed97a13287373c1b2854ac9aeddc271f) )
19341937   ROM_LOAD("cy1-voi3.12e",0x180000,0x80000,CRC(c902b4a4) SHA1(816357ec1a02a7ebf817ac1182e9c50ce5ca71f6) )
1938
1939   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
1940   ROM_LOAD( "cybsledj.nv",  0x000000, 0x2000, CRC(a73bb03e) SHA1(e074bfeae14178c867070e06f6690ed13115f5fa) )
19351941ROM_END
19361942
19371943ROM_START( driveyes )
r7640r7641
22732279   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
22742280   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
22752281   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
2276   PORT_DIPNAME( 0x40, 0x40, "Test Switch")
2277   PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
2278   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2279   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
2282   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_0) PORT_TOGGLE // alt test mode switch
2283   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
22802284
22812285   PORT_START("AN0")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 */
22822286   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
r7640r7641
23052309   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
23062310
23072311   PORT_START("DSW")      /* 63B05Z0 - $2000 DIP SW */
2308   PORT_DIPNAME( 0x01, 0x01, "DSW1 (Test Mode)")
2309   PORT_DIPSETTING(   0x01, DEF_STR( Off ) )
2310   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2312   PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
23112313   PORT_DIPNAME( 0x02, 0x02, "DSW2")
23122314   PORT_DIPSETTING(   0x02, DEF_STR( Off ) )
23132315   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
r7640r7641
23422344
23432345/* "SCI - ? */
23442346static INPUT_PORTS_START( winrun )
2345   PORT_START("PORTB")      /* 63B05Z0 - PORT B */
2346   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
2347   PORT_INCLUDE(s21default)
2348
2349   PORT_MODIFY("PORTB")      /* 63B05Z0 - PORT B */
23472350   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) /* ? */
23482351   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) /* ? */
23492352   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) /* ? */
23502353   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* ? */
23512354
2352   PORT_START("PORTC")      /* 63B05Z0 - PORT C & SCI */
2353   /* $a00004? */
2354   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
2355   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
2356   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
2357   PORT_DIPNAME( 0x40, 0x40, "Test Switch")
2358   PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
2359   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2360   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) // advances through tests
2361
2362   PORT_START("AN0")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 */
2355   PORT_MODIFY("AN0")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 */
23632356   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2364   PORT_START("AN1")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 1 */
2357   PORT_MODIFY("AN1")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 1 */
23652358   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(15) PORT_KEYDELTA(10) /* gas */
2366   PORT_START("AN2")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 2 */
2359   PORT_MODIFY("AN2")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 2 */
23672360   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(15) PORT_KEYDELTA(10) /* steering */
2368   PORT_START("AN3")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 3 */
2361   PORT_MODIFY("AN3")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 3 */
23692362   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(15) PORT_KEYDELTA(10) /* break */
2370   PORT_START("AN4")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 4 */
2363   PORT_MODIFY("AN4")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 4 */
23712364   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2372   PORT_START("AN5")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 5 */
2365   PORT_MODIFY("AN5")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 5 */
23732366   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2374   PORT_START("AN6")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 6 */
2367   PORT_MODIFY("AN6")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 6 */
23752368   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2376   PORT_START("AN7")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 7 */
2369   PORT_MODIFY("AN7")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 7 */
23772370   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
23782371
2379   PORT_START("PORTH")      /* 63B05Z0 - PORT H */
2372   PORT_MODIFY("PORTH")      /* 63B05Z0 - PORT H */
23802373   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
23812374   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
23822375   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
r7640r7641
23842377   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
23852378   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shift up */
23862379   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
2387
2388   PORT_START("DSW")      /* 63B05Z0 - $2000 DIP SW */
2389   /* $a00026.l */
2390   PORT_DIPNAME( 0x01, 0x01, "DIP1 (Test Mode)")
2391   PORT_DIPSETTING(   0x01, DEF_STR( Off ) )
2392   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2393   PORT_DIPNAME( 0x02, 0x02, "DIP2")
2394   PORT_DIPSETTING(   0x02, DEF_STR( Off ) )
2395   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2396   PORT_DIPNAME( 0x04, 0x04, "DIP3")
2397   PORT_DIPSETTING(   0x04, DEF_STR( Off ) )
2398   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2399   PORT_DIPNAME( 0x08, 0x08, "DIP4")
2400   PORT_DIPSETTING(   0x08, DEF_STR( Off ) )
2401   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2402   PORT_DIPNAME( 0x10, 0x10, "DIP5")
2403   PORT_DIPSETTING(   0x10, DEF_STR( Off ) )
2404   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2405   PORT_DIPNAME( 0x20, 0x20, "DIP6")
2406   PORT_DIPSETTING(   0x20, DEF_STR( Off ) )
2407   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2408   PORT_DIPNAME( 0x40, 0x40, "DIP7")
2409   PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
2410   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2411   PORT_DIPNAME( 0x80, 0x80, "DIP8")
2412   PORT_DIPSETTING(   0x80, DEF_STR( Off ) )
2413   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2414
2415   PORT_START("DIAL0")      /* 63B05Z0 - $3000 */
2416   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2417   PORT_START("DIAL1")      /* 63B05Z0 - $3001 */
2418   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2419   PORT_START("DIAL2")      /* 63B05Z0 - $3002 */
2420   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2421   PORT_START("DIAL3")      /* 63B05Z0 - $3003 */
2422   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
24232380INPUT_PORTS_END
24242381
2382// the default inc/dec analog keys have been chosen to map 'tank' style inputs found on Assault.
2383// this makes the game easier to use with the keyboard, providing a familiar left/right stick mapping
2384// ports are limited to 10/ef because otherwise, even when calibrated, the game will act as if the
2385// inputs wrap around when they hit the maximum, causing undesired movement
24252386static INPUT_PORTS_START( cybsled )
2426   PORT_START("PORTB")      /* 63B05Z0 - PORT B */
2427   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED )
2428   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
2429   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
2387   PORT_INCLUDE(s21default)
24302388
2431   PORT_START("PORTC")      /* 63B05Z0 - PORT C & SCI */
2432   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
2433   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
2434   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
2435   PORT_DIPNAME( 0x40, 0x40, "Test Switch")
2436   PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
2437   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2438   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
2439
2440   PORT_START("AN0")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 */
2441   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: vertical */
2442   PORT_START("AN1")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 1 */
2443   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: vertical */
2444   PORT_START("AN2")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 2 */
2445   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: horizontal */
2446   PORT_START("AN3")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 3 */
2447   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: horizontal */
2448   PORT_START("AN4")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 4 */
2389   PORT_MODIFY("AN0")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 */
2390   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x10,0xef) /* using 0x00 / 0xff causes controls to malfunction */ PORT_CODE_DEC(KEYCODE_I) PORT_CODE_INC(KEYCODE_K) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: vertical */
2391   PORT_MODIFY("AN1")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 1 */
2392   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x10,0xef) /* using 0x00 / 0xff causes controls to malfunction */ PORT_CODE_DEC(KEYCODE_E) PORT_CODE_INC(KEYCODE_D) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: vertical */
2393   PORT_MODIFY("AN2")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 2 */
2394   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x10,0xef) /* using 0x00 / 0xff causes controls to malfunction */ PORT_CODE_DEC(KEYCODE_J) PORT_CODE_INC(KEYCODE_L) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: horizontal */
2395   PORT_MODIFY("AN3")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 3 */
2396   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x10,0xef) /* using 0x00 / 0xff causes controls to malfunction */ PORT_CODE_DEC(KEYCODE_S) PORT_CODE_INC(KEYCODE_F) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: horizontal */
2397   PORT_MODIFY("AN4")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 4 */
24492398   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2450   PORT_START("AN5")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 5 */
2399   PORT_MODIFY("AN5")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 5 */
24512400   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2452   PORT_START("AN6")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 6 */
2401   PORT_MODIFY("AN6")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 6 */
24532402   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2454   PORT_START("AN7")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 7 */
2403   PORT_MODIFY("AN7")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 7 */
24552404   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
24562405
2457   PORT_START("PORTH")      /* 63B05Z0 - PORT H */
2406   PORT_MODIFY("PORTH")      /* 63B05Z0 - PORT H */
24582407   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 )
24592408   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 )
24602409   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
r7640r7641
24622411   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
24632412   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
24642413   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
2465
2466   PORT_START("DSW")      /* 63B05Z0 - $2000 DIP SW */
2467   PORT_DIPNAME( 0x01, 0x01, "DSW1 (Test Mode)")
2468   PORT_DIPSETTING(   0x01, DEF_STR( Off ) )
2469   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2470   PORT_DIPNAME( 0x02, 0x02, "DSW2")
2471   PORT_DIPSETTING(   0x02, DEF_STR( Off ) )
2472   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2473   PORT_DIPNAME( 0x04, 0x04, "DSW3")
2474   PORT_DIPSETTING(   0x04, DEF_STR( Off ) )
2475   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2476   PORT_DIPNAME( 0x08, 0x08, "DSW4")
2477   PORT_DIPSETTING(   0x08, DEF_STR( Off ) )
2478   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2479   PORT_DIPNAME( 0x10, 0x10, "DSW5")
2480   PORT_DIPSETTING(   0x10, DEF_STR( Off ) )
2481   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2482   PORT_DIPNAME( 0x20, 0x20, "DSW6")
2483   PORT_DIPSETTING(   0x20, DEF_STR( Off ) )
2484   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2485   PORT_DIPNAME( 0x40, 0x40, "DSW7")
2486   PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
2487   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2488   PORT_DIPNAME( 0x80, 0x80, "DSW8")
2489   PORT_DIPSETTING(   0x80, DEF_STR( Off ) )
2490   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2491
2492   PORT_START("DIAL0")      /* 63B05Z0 - $3000 */
2493   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2494   PORT_START("DIAL1")      /* 63B05Z0 - $3001 */
2495   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2496   PORT_START("DIAL2")      /* 63B05Z0 - $3002 */
2497   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2498   PORT_START("DIAL3")      /* 63B05Z0 - $3003 */
2499   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
25002414INPUT_PORTS_END
25012415
25022416static INPUT_PORTS_START( aircombt )
2503   PORT_START("PORTB")      /* IN#0: 63B05Z0 - PORT B */
2504   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED )
2505   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
2506   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
2417   PORT_INCLUDE(s21default)
25072418
2508   PORT_START("PORTC")      /* IN#1: 63B05Z0 - PORT C & SCI */
2509   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
2510   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
2511   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
2512   PORT_DIPNAME( 0x40, 0x40, "Test Switch")
2513   PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
2514   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2515   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
2516
2517   PORT_START("AN0")      /* IN#2: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 */
2419   PORT_MODIFY("AN0")      /* IN#2: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 */
25182420   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2519   PORT_START("AN1")      /* IN#3: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 1 */
2421   PORT_MODIFY("AN1")      /* IN#3: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 1 */
25202422   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(4)
2521   PORT_START("AN2")      /* IN#4: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 2 */
2423   PORT_MODIFY("AN2")      /* IN#4: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 2 */
25222424   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(4)
2523   PORT_START("AN3")      /* IN#5: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 3 */
2425   PORT_MODIFY("AN3")      /* IN#5: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 3 */
25242426   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(4) PORT_PLAYER(2)
2525   PORT_START("AN4")      /* IN#6: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 4 */
2427   PORT_MODIFY("AN4")      /* IN#6: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 4 */
25262428   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2527   PORT_START("AN5")      /* IN#7: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 5 */
2429   PORT_MODIFY("AN5")      /* IN#7: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 5 */
25282430   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2529   PORT_START("AN6")      /* IN#8: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 6 */
2431   PORT_MODIFY("AN6")      /* IN#8: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 6 */
25302432   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2531   PORT_START("AN7")      /* IN#9: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 7 */
2433   PORT_MODIFY("AN7")      /* IN#9: 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 7 */
25322434   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
25332435
2534   PORT_START("PORTH")      /* IN#10: 63B05Z0 - PORT H */
2436   PORT_MODIFY("DSW")      /* 63B05Z0 - $2000 DIP SW */
2437   PORT_DIPNAME( 0x01, 0x01, "DSW1") // not test mode on this gamef
2438   PORT_DIPSETTING(   0x01, DEF_STR( Off ) )
2439   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2440
2441   PORT_MODIFY("PORTH")      /* IN#10: 63B05Z0 - PORT H */
25352442   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 )
25362443   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 )
25372444   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) ///???
r7640r7641
25392446   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) // ???next color
25402447   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
25412448   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
2542
2543   PORT_START("DSW")      /* IN#11: 63B05Z0 - $2000 DIP SW */
2544   PORT_DIPNAME( 0x01, 0x01, "DSW1 (Test Mode)")
2545   PORT_DIPSETTING(   0x01, DEF_STR( Off ) )
2546   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2547   PORT_DIPNAME( 0x02, 0x02, "DSW2")
2548   PORT_DIPSETTING(   0x02, DEF_STR( Off ) )
2549   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2550   PORT_DIPNAME( 0x04, 0x04, "DSW3")
2551   PORT_DIPSETTING(   0x04, DEF_STR( Off ) )
2552   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2553   PORT_DIPNAME( 0x08, 0x08, "DSW4")
2554   PORT_DIPSETTING(   0x08, DEF_STR( Off ) )
2555   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2556   PORT_DIPNAME( 0x10, 0x10, "DSW5")
2557   PORT_DIPSETTING(   0x10, DEF_STR( Off ) )
2558   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2559   PORT_DIPNAME( 0x20, 0x20, "DSW6")
2560   PORT_DIPSETTING(   0x20, DEF_STR( Off ) )
2561   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2562   PORT_DIPNAME( 0x40, 0x40, "DSW7")
2563   PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
2564   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2565   PORT_DIPNAME( 0x80, 0x80, "DSW8")
2566   PORT_DIPSETTING(   0x80, DEF_STR( Off ) )
2567   PORT_DIPSETTING(   0x00, DEF_STR( On ) )
2568
2569   PORT_START("DIAL0")      /* IN#12: 63B05Z0 - $3000 */
2570   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2571   PORT_START("DIAL1")      /* IN#13: 63B05Z0 - $3001 */
2572   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2573   PORT_START("DIAL2")      /* IN#14: 63B05Z0 - $3002 */
2574   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
2575   PORT_START("DIAL3")      /* IN#15: 63B05Z0 - $3003 */
2576   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
25772449INPUT_PORTS_END
25782450
25792451/*    YEAR, NAME,     PARENT,  MACHINE,           INPUT,        INIT,     MONITOR,  COMPANY,   FULLNAME,                       FLAGS */
2580GAME( 1992, aircombj, 0,       poly_c140_typeB,   aircombt,     aircombt, ROT0,    "Namco", "Air Combat (Japan)",            GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
2581GAME( 1992, aircombu, aircombj,poly_c140_typeB,   aircombt,     aircombt, ROT0,    "Namco", "Air Combat (US)",                GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
2452GAME( 1992, aircomb,  0,       poly_c140_typeB,   aircombt,     aircombt, ROT0,    "Namco", "Air Combat (US)",                GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
2453GAME( 1992, aircombj, aircomb, poly_c140_typeB,   aircombt,     aircombt, ROT0,    "Namco", "Air Combat (Japan)",            GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
25822454GAME( 1993, cybsled,  0,       poly_c140_typeA,   cybsled,      cybsled,  ROT0,    "Namco", "Cyber Sled (US)",               GAME_IMPERFECT_GRAPHICS )
25832455GAME( 1993, cybsledj, cybsled, poly_c140_typeA,   cybsled,      cybsled,  ROT0,    "Namco", "Cyber Sled (Japan)",            GAME_IMPERFECT_GRAPHICS )
25842456/* 1992, ShimDrive */
src/mame/drivers/pgm.c
r7640r7641
20462046
20472047*/
20482048
2049ROM_START( kovj )
2049ROM_START( kov100 )
20502050   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code  */
20512051   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
20522052   ROM_LOAD16_BYTE( "sav111.u4",      0x100001, 0x080000, CRC(ae2f1b4e) SHA1(2ac9d84f5dee52f374941cfd68e2b98ecad436a8) )
r7640r7641
22812281
22822282*/
22832283
2284ROM_START( raf102j )
2284ROM_START( photoy2k102 )
22852285   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
22862286   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
22872287   ROM_LOAD16_BYTE( "v102.u4",     0x100001, 0x080000, CRC(a65eda9f) SHA1(6307cacf4a262e781753eff14700a0455837780c) )
r7640r7641
23882388
23892389*/
23902390
2391
23912392ROM_START( killbld )
23922393   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
23932394   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
2394   ROM_LOAD16_BYTE( "kb_u3_v104.u3",     0x100001, 0x080000, CRC(6db1d719) SHA1(804002f014d275aaf0368fb7f904938fe4ac07ee) )
2395   ROM_LOAD16_BYTE( "kb_u6_v104.u6",     0x100000, 0x080000, CRC(31ecc978) SHA1(82666d534e4151775063af6d39f575faba0f1047) )
2396   ROM_LOAD16_BYTE( "kb_u4_v104.u4",     0x200001, 0x080000, CRC(1ed8b2e7) SHA1(331c037640cfc1fe743cd0e65a1156c470b3303e) ) // order?
2397   ROM_LOAD16_BYTE( "kb_u5_v104.u5",     0x200000, 0x080000, CRC(a0bafc29) SHA1(b20db7c16353c6f87ed3c08c9d037b07336711f1) ) // order?
2395   ROM_LOAD16_WORD_SWAP( "kb.u9", 0x100000, 0x200000, BAD_DUMP CRC(43da77d7) SHA1(f99e89da4587d6c9e3c2ae66fa139830d893fdda) ) // not verified to be correct
23982396
2399   ROM_REGION( 0x4000, "user2", ROMREGION_ERASEFF )
2397   ROM_REGION( 0x4000, "user2", 0 ) /* dump of RAM shared with protection device, todo, emulate protection device instead! */
2398   ROM_LOAD( "kb.ram", 0x000000, 0x04000,  CRC(6994c507) SHA1(8264c56709488b72282d6ddfce3a4b188c6cc109) )
24002399
24012400   /* CPU2 = Z80, romless, code uploaded by 68k */
24022401
24032402   ROM_REGION( 0x010000, "user1", 0 ) /* Protection Data */
2404   ROM_LOAD16_WORD_SWAP( "kb_u2_v104.u2", 0x000000, 0x010000,  CRC(c970f6d5) SHA1(399fc6f80262784c566363c847dc3fdc4fb37494) )
2403   ROM_LOAD16_WORD_SWAP( "kb_u2.rom", 0x000000, 0x010000,  CRC(de3eae63) SHA1(03af767ef764055bda528b5cc6a24b9e1218cca8) )
24052404
24062405   ROM_REGION( 0x800000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
24072406   ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
r7640r7641
24312430   ROM_LOAD( "m0300.u1",     0x400000, 0x400000, CRC(93159695) SHA1(50c5976c9b681bd3d1ebefa3bfa9fe6e72dcb96f) )
24322431ROM_END
24332432
2434ROM_START( killbldt )
2433ROM_START( killbld104 )
24352434   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
24362435   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
2437   ROM_LOAD16_WORD_SWAP( "kb.u9", 0x100000, 0x200000, BAD_DUMP CRC(43da77d7) SHA1(f99e89da4587d6c9e3c2ae66fa139830d893fdda) ) // not verified to be correct
2436   ROM_LOAD16_BYTE( "kb_u3_v104.u3",     0x100001, 0x080000, CRC(6db1d719) SHA1(804002f014d275aaf0368fb7f904938fe4ac07ee) )
2437   ROM_LOAD16_BYTE( "kb_u6_v104.u6",     0x100000, 0x080000, CRC(31ecc978) SHA1(82666d534e4151775063af6d39f575faba0f1047) )
2438   ROM_LOAD16_BYTE( "kb_u4_v104.u4",     0x200001, 0x080000, CRC(1ed8b2e7) SHA1(331c037640cfc1fe743cd0e65a1156c470b3303e) ) // order?
2439   ROM_LOAD16_BYTE( "kb_u5_v104.u5",     0x200000, 0x080000, CRC(a0bafc29) SHA1(b20db7c16353c6f87ed3c08c9d037b07336711f1) ) // order?
24382440
2439   ROM_REGION( 0x4000, "user2", 0 ) /* dump of RAM shared with protection device, todo, emulate protection device instead! */
2440   ROM_LOAD( "kb.ram", 0x000000, 0x04000,  CRC(6994c507) SHA1(8264c56709488b72282d6ddfce3a4b188c6cc109) )
2441   ROM_REGION( 0x4000, "user2", ROMREGION_ERASEFF )
24412442
24422443   /* CPU2 = Z80, romless, code uploaded by 68k */
24432444
24442445   ROM_REGION( 0x010000, "user1", 0 ) /* Protection Data */
2445   ROM_LOAD16_WORD_SWAP( "kb_u2.rom", 0x000000, 0x010000,  CRC(de3eae63) SHA1(03af767ef764055bda528b5cc6a24b9e1218cca8) )
2446   ROM_LOAD16_WORD_SWAP( "kb_u2_v104.u2", 0x000000, 0x010000,  CRC(c970f6d5) SHA1(399fc6f80262784c566363c847dc3fdc4fb37494) )
24462447
24472448   ROM_REGION( 0x800000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
24482449   ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
r7640r7641
24732474ROM_END
24742475
24752476
2477
24762478/*
24772479Puzzle Star
24782480IGS, 1999
r7640r7641
27462748   ROM_LOAD( "m0500.rom",    0x400000, 0x200000, CRC(37928cdd) SHA1(e80498cabc2a6a54d4f3ebcb097d4b3fad96fe55) )
27472749ROM_END
27482750
2751
27492752ROM_START( kov2 )
27502753   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
27512754   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
2752   ROM_LOAD16_WORD_SWAP( "igs_u18.rom",    0x100000, 0x400000, CRC(86205879) SHA1(f73d5b70b41d39be1cac75e474b025de2cce0b01) )
2755   ROM_LOAD16_WORD_SWAP( "u18.107",      0x100000, 0x400000, CRC(661a5b2c) SHA1(125054fabc93d4f4cba869c3e6adf863650d30cf) )
27532756
27542757   /* CPU2 = Z80, romless, code uploaded by 68k */
27552758
r7640r7641
27572760   ROM_LOAD( "kov2_v100_hongkong.asic", 0x000000, 0x04000,  CRC(e0d7679f) SHA1(e1c2d127eba4ddbeb8ad173c55b90ac1467e1ca8) )
27582761
27592762   ROM_REGION32_LE( 0x400000, "user1", 0 ) /* Protection Data (encrypted external ARM data) */
2760   ROM_LOAD( "igs_u19.rom", 0x000000, 0x200000,   CRC(edd59922) SHA1(09b14f20f685944a93292c83e5830849aade42c9) )
2763   ROM_LOAD( "u19.102", 0x000000, 0x200000,   CRC(462e2980) SHA1(3da7c3d2c65b59f50c78be1c25922b71d40f6080) )
27612764
27622765   ROM_REGION( 0xc00000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
27632766   ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
r7640r7641
28182821   ROM_LOAD( "m1200.rom",    0x800000, 0x800000, CRC(b0d88720) SHA1(44ab137e3f8e15b7cb5697ffbd9b1143d8210c4f) )
28192822ROM_END
28202823
2824
2825ROM_START( kov2103 )
2826   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
2827   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
2828   ROM_LOAD16_WORD_SWAP( "u18.103",    0x100000, 0x400000, CRC(98c32f76) SHA1(ec7e35e8071bb7097e415493be4e40be0ca19fd6) )
2829
2830   /* CPU2 = Z80, romless, code uploaded by 68k */
2831
2832   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
2833   ROM_LOAD( "kov2_v100_hongkong.asic", 0x000000, 0x04000,  CRC(e0d7679f) SHA1(e1c2d127eba4ddbeb8ad173c55b90ac1467e1ca8) )
2834
2835   ROM_REGION32_LE( 0x400000, "user1", 0 ) /* Protection Data (encrypted external ARM data) */
2836   ROM_LOAD( "u19.101", 0x000000, 0x200000, CRC(8c35f2fe) SHA1(d4858f97fcfad0f342fccbc9cf1590276cc3c69c) )
2837
2838   ROM_REGION( 0xc00000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
2839   ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
2840   ROM_LOAD( "t1200.rom",    0x400000, 0x800000, CRC(d7e26609) SHA1(bdad810f82fcf1d50a8791bdc495374ec5a309c6) )
2841
2842   ROM_REGION( 0xc00000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
2843   /* 32x32 Tile Data is put here for easier Decoding */
2844
2845   ROM_REGION( 0x2800000, "gfx3", 0 ) /* Sprite Colour Data */
2846   ROM_LOAD( "a1200.rom",    0x0000000, 0x0800000, CRC(ceeb81d8) SHA1(5476729443fc1bc9593ae10fbf7cbc5d7290b017) )
2847   ROM_LOAD( "a1201.rom",    0x0800000, 0x0800000, CRC(82f0a878) SHA1(ddd13e404252a71de1b2b3b974b910f899f51c38) )
2848   ROM_LOAD( "a1202.rom",    0x1000000, 0x0800000, CRC(4bb92fae) SHA1(f0b6d72ed425de1c69dc8f8d5795ea760a4a59b0) )
2849   ROM_LOAD( "a1203.rom",    0x1800000, 0x0800000, CRC(e73cb627) SHA1(4c6e48b845a5d1e8f9899010fbf273d54c2b8899) )
2850   ROM_LOAD( "a1204.rom",    0x2000000, 0x0800000, CRC(27527099) SHA1(e23cf366bdeaca1e009a5cec6b13164310a34384) )
2851
2852   ROM_REGION( 0x1000000, "gfx4", 0 ) /* Sprite Masks + Colour Indexes */
2853   ROM_LOAD( "b1200.rom",   0x0000000, 0x0800000,  CRC(bed7d994) SHA1(019dfba8154256d64cd249eb0fa4c451edce34b8) )
2854   ROM_LOAD( "b1201.rom",   0x0800000, 0x0800000,  CRC(f251eb57) SHA1(56a5fc14ab7822f83379cecb26638e5bb266349a) )
2855
2856   ROM_REGION( 0x1000000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */
2857   ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
2858   ROM_LOAD( "m1200.rom",    0x800000, 0x800000, CRC(b0d88720) SHA1(44ab137e3f8e15b7cb5697ffbd9b1143d8210c4f) )
2859ROM_END
2860
2861
2862ROM_START( kov2102 )
2863   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
2864   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
2865   ROM_LOAD16_WORD_SWAP( "u18.102",    0x100000, 0x400000, CRC(a2489c37) SHA1(77ea7cdec211848296dafd45bee1d042133ea2a6) )
2866
2867   /* CPU2 = Z80, romless, code uploaded by 68k */
2868
2869   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
2870   ROM_LOAD( "kov2_v100_hongkong.asic", 0x000000, 0x04000,  CRC(e0d7679f) SHA1(e1c2d127eba4ddbeb8ad173c55b90ac1467e1ca8) )
2871
2872   ROM_REGION32_LE( 0x400000, "user1", 0 ) /* Protection Data (encrypted external ARM data) */
2873   ROM_LOAD( "u19.101", 0x000000, 0x200000, CRC(8c35f2fe) SHA1(d4858f97fcfad0f342fccbc9cf1590276cc3c69c) )
2874
2875   ROM_REGION( 0xc00000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
2876   ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
2877   ROM_LOAD( "t1200.rom",    0x400000, 0x800000, CRC(d7e26609) SHA1(bdad810f82fcf1d50a8791bdc495374ec5a309c6) )
2878
2879   ROM_REGION( 0xc00000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
2880   /* 32x32 Tile Data is put here for easier Decoding */
2881
2882   ROM_REGION( 0x2800000, "gfx3", 0 ) /* Sprite Colour Data */
2883   ROM_LOAD( "a1200.rom",    0x0000000, 0x0800000, CRC(ceeb81d8) SHA1(5476729443fc1bc9593ae10fbf7cbc5d7290b017) )
2884   ROM_LOAD( "a1201.rom",    0x0800000, 0x0800000, CRC(82f0a878) SHA1(ddd13e404252a71de1b2b3b974b910f899f51c38) )
2885   ROM_LOAD( "a1202.rom",    0x1000000, 0x0800000, CRC(4bb92fae) SHA1(f0b6d72ed425de1c69dc8f8d5795ea760a4a59b0) )
2886   ROM_LOAD( "a1203.rom",    0x1800000, 0x0800000, CRC(e73cb627) SHA1(4c6e48b845a5d1e8f9899010fbf273d54c2b8899) )
2887   ROM_LOAD( "a1204.rom",    0x2000000, 0x0800000, CRC(27527099) SHA1(e23cf366bdeaca1e009a5cec6b13164310a34384) )
2888
2889   ROM_REGION( 0x1000000, "gfx4", 0 ) /* Sprite Masks + Colour Indexes */
2890   ROM_LOAD( "b1200.rom",   0x0000000, 0x0800000,  CRC(bed7d994) SHA1(019dfba8154256d64cd249eb0fa4c451edce34b8) )
2891   ROM_LOAD( "b1201.rom",   0x0800000, 0x0800000,  CRC(f251eb57) SHA1(56a5fc14ab7822f83379cecb26638e5bb266349a) )
2892
2893   ROM_REGION( 0x1000000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */
2894   ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
2895   ROM_LOAD( "m1200.rom",    0x800000, 0x800000, CRC(b0d88720) SHA1(44ab137e3f8e15b7cb5697ffbd9b1143d8210c4f) )
2896ROM_END
2897
2898ROM_START( kov2100 )
2899   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
2900   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
2901   ROM_LOAD16_WORD_SWAP( "igs_u18.rom",    0x100000, 0x400000, CRC(86205879) SHA1(f73d5b70b41d39be1cac75e474b025de2cce0b01) )
2902
2903   /* CPU2 = Z80, romless, code uploaded by 68k */
2904
2905   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
2906   ROM_LOAD( "kov2_v100_hongkong.asic", 0x000000, 0x04000,  CRC(e0d7679f) SHA1(e1c2d127eba4ddbeb8ad173c55b90ac1467e1ca8) )
2907
2908   ROM_REGION32_LE( 0x400000, "user1", 0 ) /* Protection Data (encrypted external ARM data) */
2909   ROM_LOAD( "u19.100", 0x000000, 0x200000,   CRC(edd59922) SHA1(09b14f20f685944a93292c83e5830849aade42c9) )
2910
2911   ROM_REGION( 0xc00000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
2912   ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
2913   ROM_LOAD( "t1200.rom",    0x400000, 0x800000, CRC(d7e26609) SHA1(bdad810f82fcf1d50a8791bdc495374ec5a309c6) )
2914
2915   ROM_REGION( 0xc00000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
2916   /* 32x32 Tile Data is put here for easier Decoding */
2917
2918   ROM_REGION( 0x2800000, "gfx3", 0 ) /* Sprite Colour Data */
2919   ROM_LOAD( "a1200.rom",    0x0000000, 0x0800000, CRC(ceeb81d8) SHA1(5476729443fc1bc9593ae10fbf7cbc5d7290b017) )
2920   ROM_LOAD( "a1201.rom",    0x0800000, 0x0800000, CRC(82f0a878) SHA1(ddd13e404252a71de1b2b3b974b910f899f51c38) )
2921   ROM_LOAD( "a1202.rom",    0x1000000, 0x0800000, CRC(4bb92fae) SHA1(f0b6d72ed425de1c69dc8f8d5795ea760a4a59b0) )
2922   ROM_LOAD( "a1203.rom",    0x1800000, 0x0800000, CRC(e73cb627) SHA1(4c6e48b845a5d1e8f9899010fbf273d54c2b8899) )
2923   ROM_LOAD( "a1204.rom",    0x2000000, 0x0800000, CRC(27527099) SHA1(e23cf366bdeaca1e009a5cec6b13164310a34384) )
2924
2925   ROM_REGION( 0x1000000, "gfx4", 0 ) /* Sprite Masks + Colour Indexes */
2926   ROM_LOAD( "b1200.rom",   0x0000000, 0x0800000,  CRC(bed7d994) SHA1(019dfba8154256d64cd249eb0fa4c451edce34b8) )
2927   ROM_LOAD( "b1201.rom",   0x0800000, 0x0800000,  CRC(f251eb57) SHA1(56a5fc14ab7822f83379cecb26638e5bb266349a) )
2928
2929   ROM_REGION( 0x1000000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */
2930   ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
2931   ROM_LOAD( "m1200.rom",    0x800000, 0x800000, CRC(b0d88720) SHA1(44ab137e3f8e15b7cb5697ffbd9b1143d8210c4f) )
2932ROM_END
2933
28212934ROM_START( kov2p )
28222935   ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
28232936   ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )  // (BIOS)
r7640r7641
43744487
43754488GAME( 1997, pgm,          0,         pgm,     pgm,      pgm,        ROT0,   "IGS", "PGM (Polygame Master) System BIOS", GAME_IS_BIOS_ROOT )
43764489
4490/* -----------------------------------------------------------------------------------------------------------------------
4491   Working (at least one set of the game is fully working)
4492   -----------------------------------------------------------------------------------------------------------------------*/
4493
43774494GAME( 1997, orlegend,     pgm,       pgm,     pgm,      orlegend,   ROT0,   "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 126)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
43784495GAME( 1997, orlegende,    orlegend,  pgm,     pgm,      orlegend,   ROT0,   "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 112)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
43794496GAME( 1997, orlegendc,    orlegend,  pgm,     pgm,      orlegend,   ROT0,   "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 112, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
43804497GAME( 1997, orlegend111c, orlegend,  pgm,     pgm,      orlegend,   ROT0,   "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 111, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
43814498GAME( 1997, orlegend105k, orlegend,  pgm,     orld105k, orlegend,   ROT0,   "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 105, Korean Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
4499
4500GAME( 1997, drgw2,        pgm,       drgw2,   pgm,      drgw2,      ROT0,   "IGS", "Dragon World II (ver. 110X, Export)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // This set still has protection issues!
4501GAME( 1997, drgw2j,       drgw2,     drgw2,   pgm,      drgw2j,     ROT0,   "IGS", "Chuugokuryuu II (ver. 100J, Japan)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // This set still has protection issues!
43824502GAME( 1997, drgw2c,       drgw2,     drgw2,   pgm,      drgw2c,     ROT0,   "IGS", "Zhong Guo Long II (ver. 100C, China)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
4503
43834504GAME( 1999, photoy2k,     pgm,       kov,     photoy2k, djlzz,      ROT0,   "IGS", "Photo Y2K (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
4384GAME( 1999, raf102j,      photoy2k,  kov,     photoy2k, djlzz,      ROT0,   "IGS", "Real and Fake / Photo Y2K (ver. 102, Japanese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
4385GAME( 1999, kovsh,        kov,       kov,     sango,    kovsh,      ROT0,   "IGS", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
4386GAME( 2000, kov2,         pgm,       kov2,    sango,    kov2,       ROT0,   "IGS", "Knights of Valour 2 / Sangoku Senki 2 (ver. 100)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
4387GAME( 2000, kov2106,      kov2,      kov2,    sango,    kov2,       ROT0,   "IGS", "Knights of Valour 2 / Sangoku Senki 2 (ver. 106)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
4505GAME( 1999, photoy2k102,  photoy2k,  kov,     photoy2k, djlzz,      ROT0,   "IGS", "Photo Y2K (ver. 102, Japanese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
4506
4507GAME( 1999, kovsh,        pgm,       kov,     sango,    kovsh,      ROT0,   "IGS", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
4508
4509GAME( 2000, kov2,         pgm,       kov2,    sango,    kov2,       ROT0,   "IGS", "Knights of Valour 2 / Sangoku Senki 2 (ver. 107)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // 05/10/01 14:24:08 V107 (Ext. Arm V102, Int. Arm V100HK)
4510GAME( 2000, kov2106,      kov2,      kov2,    sango,    kov2,       ROT0,   "IGS", "Knights of Valour 2 / Sangoku Senki 2 (ver. 106)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // 02/27/01 13:26:46 V106 (Ext. Arm V102, Int. Arm V100HK)
4511GAME( 2000, kov2103,      kov2,      kov2,    sango,    kov2,       ROT0,   "IGS", "Knights of Valour 2 / Sangoku Senki 2 (ver. 103)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // 12/28/00 15:09:31 V103 (Ext. Arm V101, Int. Arm V100HK)
4512GAME( 2000, kov2102,      kov2,      kov2,    sango,    kov2,       ROT0,   "IGS", "Knights of Valour 2 / Sangoku Senki 2 (ver. 102)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // 12/14/00 10:33:36 V102 (Ext. Arm V101, Int. Arm V100HK)
4513GAME( 2000, kov2100,      kov2,      kov2,    sango,    kov2,       ROT0,   "IGS", "Knights of Valour 2 / Sangoku Senki 2 (ver. 100)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // 11/29/00 11:03:08 V100 (Ext. Arm V100, Int. Arm V100HK)
4514
43884515GAME( 2001, martmast,     pgm,       kov2,    sango,    martmast,   ROT0,   "IGS", "Martial Masters (ver. 102)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
43894516GAME( 2001, martmastc,    martmast,  kov2,    sango,    martmast,   ROT0,   "IGS", "Martial Masters (ver. 101, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
43904517
4391/* Playable but maybe imperfect protection emulation */
4392GAME( 1997, drgw2,        pgm,       drgw2,   pgm,      drgw2,      ROT0,   "IGS", "Dragon World II (ver. 110X, Export)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
4393GAME( 1997, drgw2j,       drgw2,     drgw2,   pgm,      drgw2j,     ROT0,   "IGS", "Chuugokuryuu II (ver. 100J, Japan)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
4394GAME( 1998, killbldt,     killbld,   killbld, killbld,  killbld,    ROT0,   "IGS", "The Killing Blade (ver. 109, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // it's playable, but there are some things unclear about the protection
4518/* -----------------------------------------------------------------------------------------------------------------------
4519   Partially Working, playable, but some imperfections
4520   -----------------------------------------------------------------------------------------------------------------------*/
4521
4522GAME( 1998, killbld,      0,         killbld, killbld,  killbld,    ROT0,   "IGS", "The Killing Blade (ver. 109, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // it's playable, but there are some things unclear about the protection
4523GAME( 1998, killbld104,   killbld,   killbld, killbld,  killbld,    ROT0,   "IGS", "The Killing Blade (ver. 104)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // this set doesn't work, needs the DMA device emulating properly rather than using extracted data
4524
43954525GAME( 1998, olds,         pgm,       olds,    olds,     olds,       ROT0,   "IGS", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 101, Korean Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
43964526GAME( 1998, olds100,      olds,      olds,    olds,     olds,       ROT0,   "IGS", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
43974527GAME( 1998, olds100a,     olds,      olds,    olds,     olds,       ROT0,   "IGS", "Oriental Legend Special / Xi You Shi E Zhuan Super (alt ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // grashes on some bosses, high score table etc.
43984528
4399/* not working */
4529/* -----------------------------------------------------------------------------------------------------------------------
4530   NOT Working (mostly due to needing internal protection roms dumped)
4531   -----------------------------------------------------------------------------------------------------------------------*/
44004532GAME( 1998, drgw3,        pgm,       pgm,     sango,    dw3,        ROT0,   "IGS", "Dragon World 3 (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
44014533GAME( 1998, drgw3k,       drgw3,     pgm,     sango,    dw3,        ROT0,   "IGS", "Dragon World 3 (ver. 106, Korean Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
4402GAME( 1998, killbld,      pgm,       killbld, killbld,  killbld,    ROT0,   "IGS", "The Killing Blade (ver. 104)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
4534
44034535GAME( 1999, kov,          pgm,       kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour / Sangoku Senki (ver. 117)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
44044536GAME( 1999, kov115,       kov,       kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour / Sangoku Senki (ver. 115)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4405GAME( 1999, kovj,         kov,       kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour / Sangoku Senki (ver. 100, Japanese Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4406GAME( 1999, kovplus,      kov,       kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4407GAME( 1999, kovplusa,     kov,       kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour Plus / Sangoku Senki Plus (alt ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4537GAME( 1999, kov100,       kov,       kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour / Sangoku Senki (ver. 100, Japanese Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4538
4539GAME( 1999, kovplus,      pgm,       kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4540GAME( 1999, kovplusa,     kovplus,   kov,     sango,    kov,        ROT0,   "IGS", "Knights of Valour Plus / Sangoku Senki Plus (alt ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4541
44084542GAME( 1999, puzlstar,     pgm,       kov,     sango,    pstar,      ROT0,   "IGS", "Puzzle Star (ver. 100MG)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4409GAME( 2001, kov2p,        kov2,      kov2,    sango,    kov2p,      ROT0,   "IGS", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M204XX)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4410GAME( 2001, kov2p205,     kov2,      kov2,    sango,    kov2p,      ROT0,   "IGS", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M205XX)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4543
4544GAME( 2001, kov2p,        pgm,       kov2,    sango,    kov2p,      ROT0,   "IGS", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M204XX)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4545GAME( 2001, kov2p205,     kov2p,     kov2,    sango,    kov2p,      ROT0,   "IGS", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M205XX)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4546
44114547GAME( 2001, ddp2,         pgm,       kov2,    ddp2,     ddp2,       ROT270, "IGS", "Bee Storm - DoDonPachi II (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
44124548GAME( 2001, ddp2a,        ddp2,      kov2,    ddp2,     ddp2,       ROT270, "IGS", "Bee Storm - DoDonPachi II (ver. 102)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4549
44134550GAME( 2001, puzzli2,      pgm,       kov,     sango,    puzzli2,    ROT0,   "IGS", "Puzzli 2 Super (ver. 200)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
4551
44144552GAME( 2002, dmnfrnt,      pgm,       svg,     sango,    dmnfrnt,    ROT0,   "IGS", "Demon Front (ver. 102)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
44154553GAME( 2002, dmnfrnta,     dmnfrnt,   svg,     sango,    dmnfrnt,    ROT0,   "IGS", "Demon Front (ver. 105)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4554
44164555GAME( 2003, theglad,      pgm,       svg,     sango,    theglad,    ROT0,   "IGS", "The Gladiator (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
44174556GAME( 2003, theglada,     theglad,   svg,     sango,    theglad,    ROT0,   "IGS", "The Gladiator (ver. 101)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4557
44184558GAME( 2004, oldsplus,     pgm,       kov,     olds,     oldsplus,   ROT0,   "IGS", "Oriental Legend Special Plus / Xi You Shi E Zhuan Super Plus", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4559
44194560GAME( 2004, kovshp,       kov,       kov,     sango,    kovshp,     ROT0,   "IGS", "Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4561
44204562GAME( 2005, killbldp,     pgm,       svg,     sango,    killbldp,   ROT0,   "IGS", "The Killing Blade Plus (ver. 300)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4563
44214564GAME( 2004, happy6,       pgm,       svg,     sango,    svg,        ROT0,   "IGS", "Happy 6-in-1 (ver. 101CN)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
4565
44224566GAME( 2005, svg,          pgm,       svg,     sango,    svg,        ROT0,   "IGS", "S.V.G. - Spectral vs Generation (ver. 200)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
src/mame/drivers/cbasebal.c
r7640r7641
5050   {
5151   case 2:
5252      return cbasebal_textram_r(space, offset);   /* VRAM */
53      break;
5453   case 1:
5554      if (offset < 0x800)
5655         return space->machine->generic.paletteram.u8[offset];
r7640r7641
5958      break;
6059   default:
6160      return cbasebal_scrollram_r(space, offset);   /* SCROLL */
62      break;
6361   }
6462}
6563
src/mame/drivers/snesb.c
r7640r7641
283283}
284284
285285static ADDRESS_MAP_START( spc_mem, ADDRESS_SPACE_PROGRAM, 8 )
286   AM_RANGE(0x0000, 0x00ef) AM_DEVREADWRITE("spc700", spc_ram_r, spc_ram_w)      /* lower 32k ram */
287   AM_RANGE(0x00f0, 0x00ff) AM_DEVREADWRITE("spc700", spc_io_r, spc_io_w)      /* spc io */
286   AM_RANGE(0x0000, 0x00ef) AM_DEVREADWRITE("spc700", spc_ram_r, spc_ram_w)   /* lower 32k ram */
287   AM_RANGE(0x00f0, 0x00ff) AM_DEVREADWRITE("spc700", spc_io_r, spc_io_w)     /* spc io */
288288   AM_RANGE(0x0100, 0xffff) AM_DEVWRITE("spc700", spc_ram_100_w)
289289   AM_RANGE(0x0100, 0xffbf) AM_DEVREAD("spc700", spc_ram_100_r)
290290   AM_RANGE(0xffc0, 0xffff) AM_DEVREAD("spc700", spc_ipl_r)
r7640r7641
333333
334334#ifdef SNES_LAYER_DEBUG
335335   PORT_START("DEBUG1")
336   PORT_CONFNAME( 0x70, 0x00, "Select OAM" )
337   PORT_CONFSETTING(   0x00, "All" )
338   PORT_CONFSETTING(   0x10, "OAM1 only" )
339   PORT_CONFSETTING(   0x20, "OAM2 only" )
340   PORT_CONFSETTING(   0x30, "OAM3 only" )
341   PORT_CONFSETTING(   0x40, "OAM4 only" )
342   PORT_CONFNAME( 0x80, 0x00, "Draw sprite in reverse order" )
343   PORT_CONFSETTING(   0x00, DEF_STR( Off ) )
344   PORT_CONFSETTING(   0x80, DEF_STR( On ) )
336   PORT_CONFNAME( 0x03, 0x00, "Select BG1 priority" )
337   PORT_CONFSETTING(    0x00, "All" )
338   PORT_CONFSETTING(    0x01, "BG1B (lower) only" )
339   PORT_CONFSETTING(    0x02, "BG1A (higher) only" )
340   PORT_CONFNAME( 0x0c, 0x00, "Select BG2 priority" )
341   PORT_CONFSETTING(    0x00, "All" )
342   PORT_CONFSETTING(    0x04, "BG2B (lower) only" )
343   PORT_CONFSETTING(    0x08, "BG2A (higher) only" )
344   PORT_CONFNAME( 0x30, 0x00, "Select BG3 priority" )
345   PORT_CONFSETTING(    0x00, "All" )
346   PORT_CONFSETTING(    0x10, "BG3B (lower) only" )
347   PORT_CONFSETTING(    0x20, "BG3A (higher) only" )
348   PORT_CONFNAME( 0xc0, 0x00, "Select BG4 priority" )
349   PORT_CONFSETTING(    0x00, "All" )
350   PORT_CONFSETTING(    0x40, "BG4B (lower) only" )
351   PORT_CONFSETTING(    0x80, "BG4A (higher) only" )
345352
346353   PORT_START("DEBUG2")
347354   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle BG 1") PORT_CODE(KEYCODE_1_PAD)
r7640r7641
350357   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle BG 4") PORT_CODE(KEYCODE_4_PAD)
351358   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Objects") PORT_CODE(KEYCODE_5_PAD)
352359   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Main/Sub") PORT_CODE(KEYCODE_6_PAD)
353   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Back col") PORT_CODE(KEYCODE_7_PAD)
360   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Color Math") PORT_CODE(KEYCODE_7_PAD)
354361   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Windows") PORT_CODE(KEYCODE_8_PAD)
355362
356363   PORT_START("DEBUG3")
357   PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Pal prev") PORT_CODE(KEYCODE_B)
358   PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Pal next") PORT_CODE(KEYCODE_N)
359   PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Transparency") PORT_CODE(KEYCODE_9_PAD)
364   PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mosaic") PORT_CODE(KEYCODE_9_PAD)
365   PORT_CONFNAME( 0x70, 0x00, "Select OAM priority" )
366   PORT_CONFSETTING(    0x00, "All" )
367   PORT_CONFSETTING(    0x10, "OAM0 only" )
368   PORT_CONFSETTING(    0x20, "OAM1 only" )
369   PORT_CONFSETTING(    0x30, "OAM2 only" )
370   PORT_CONFSETTING(    0x40, "OAM3 only" )
371   PORT_CONFNAME( 0x80, 0x00, "Draw sprite in reverse order" )
372   PORT_CONFSETTING(    0x00, DEF_STR( Off ) )
373   PORT_CONFSETTING(    0x80, DEF_STR( On ) )
360374
361375   PORT_START("DEBUG4")
362376   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 0 draw")
src/mame/drivers/metro.c
r7640r7641
343494  Blazing Tornado             ?           14220       Also has Konami 053936 gfx chip
353596  Grand Striker 2             HUM-003(A)  14220       Also has Konami 053936 gfx chip
363695  Daitoride                   MTR5260-A   14220
3795  Mouse Shooter GoGo          -           14220       No sound CPU
373895  Pururun                     MTR5260-A   14220
383995  Puzzli                      MTR5260-A   14220
394096  Sankokushi                  MTR5260-A   14220
r7640r7641
5051
5152Not dumped yet:
525394  Toride II
5394  Mouse Shooter GoGo (might be a prequel to Bang Bang Ball)
5454
5555To Do:
5656
57-   1 pixel granularity in the window's placement (8 pixels now, see daitorid title)
5857-   Coin lockout
5958-   Some gfx problems in ladykill, 3kokushi, puzzli, gakusai
59  -  Seems related to how we handle windows and wrapping
6060-   Are the 16x16 tiles used by Mouja a Imagetek 14300-only feature?
61-   Flip screen doesn't work correctly in Mouja due to asymmetrical visible area
61-   Interrupt timing needs figuring out properly, having it incorrect
62    causes scrolling glitches in some games.  Test cases Mouse Go Go
63    title screen, GunMaster title screen.  Changing it can cause
64    excessive slowdown in said games however.
65-   Bang Bang Ball / Bubble Buster slow to a crawl when you press a
66    button between levels, on a real PCB it speeds up instead (related
67    to above?)
6268
6369Notes:
6470
r7640r7641
8793#include "cpu/m68000/m68000.h"
8894#include "cpu/h83002/h8.h"
8995#include "cpu/upd7810/upd7810.h"
96#include "includes/metro.h"
9097#include "machine/eeprom.h"
91#include "video/konicdev.h"
9298#include "sound/2610intf.h"
9399#include "sound/2151intf.h"
94100#include "sound/2413intf.h"
95101#include "sound/okim6295.h"
96102#include "sound/ymf278b.h"
103#include "video/konicdev.h"
97104
98/* Variables defined in video: */
99
100extern UINT16 *metro_videoregs;
101extern UINT16 *metro_screenctrl;
102extern UINT16 *metro_scroll;
103extern UINT16 *metro_tiletable;
104extern size_t metro_tiletable_size;
105extern UINT16 *metro_vram_0, *metro_vram_1, *metro_vram_2;
106extern UINT16 *metro_window;
107extern UINT16 *metro_K053936_ram;
108WRITE16_HANDLER( metro_K053936_w );
109
110
111/* Functions defined in video: */
112
113WRITE16_HANDLER( metro_window_w );
114
115WRITE16_HANDLER( metro_vram_0_w );
116WRITE16_HANDLER( metro_vram_1_w );
117WRITE16_HANDLER( metro_vram_2_w );
118
119
120VIDEO_START( metro_14100 );
121VIDEO_START( metro_14220 );
122VIDEO_START( metro_14300 );
123VIDEO_START( blzntrnd );
124VIDEO_START( gstrik2 );
125
126VIDEO_UPDATE( metro );
127
128
129105/***************************************************************************
130106
131107
r7640r7641
134110
135111***************************************************************************/
136112
137static int irq_line, blitter_bit;
138
139static UINT8 requested_int[8];
140
141static UINT16 *metro_irq_levels, *metro_irq_vectors, *metro_irq_enable;
142
143113static READ16_HANDLER( metro_irq_cause_r )
144114{
145   return   requested_int[0] * 0x01 +   // vblank
146         requested_int[1] * 0x02 +
147         requested_int[2] * 0x04 +   // blitter
148         requested_int[3] * 0x08 +
149         requested_int[4] * 0x10 +
150         requested_int[5] * 0x20 +
151         requested_int[6] * 0x40 +   // unused
152         requested_int[7] * 0x80 ;   // unused
115   metro_state *state = (metro_state *)space->machine->driver_data;
116
117   return   state->requested_int[0] * 0x01 +   // vblank
118         state->requested_int[1] * 0x02 +
119         state->requested_int[2] * 0x04 +   // blitter
120         state->requested_int[3] * 0x08 +
121         state->requested_int[4] * 0x10 +
122         state->requested_int[5] * 0x20 +
123         state->requested_int[6] * 0x40 +   // unused
124         state->requested_int[7] * 0x80 ;   // unused
153125}
154126
155127
156128/* Update the IRQ state based on all possible causes */
157static void update_irq_state(running_machine *machine)
129static void update_irq_state( running_machine *machine )
158130{
159   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
131   metro_state *state = (metro_state *)machine->driver_data;
132   const address_space *space = cpu_get_address_space(state->maincpu, ADDRESS_SPACE_PROGRAM);
160133
161   /*  Get the pending IRQs (only the enabled ones, e.g. where
162        irq_enable is *0*)  */
163   UINT16 irq = metro_irq_cause_r(space, 0, 0xffff) & ~*metro_irq_enable;
134   /*  Get the pending IRQs (only the enabled ones, e.g. where irq_enable is *0*)  */
135   UINT16 irq = metro_irq_cause_r(space, 0, 0xffff) & ~*state->irq_enable;
164136
165   if (irq_line == -1)   /* mouja, gakusai, gakusai2, dokyusei, dokyusp */
137   if (state->irq_line == -1)   /* mouja, gakusai, gakusai2, dokyusei, dokyusp */
166138   {
167      /*  This is for games that supply an *IRQ Vector* on the data bus
168            together with an IRQ level for each possible IRQ source */
139      /*  This is for games that supply an *IRQ Vector* on the data bus together with an IRQ level for each possible IRQ source */
140      UINT8 irq_level[8] = { 0 };
141      int i;
169142
170      UINT8 irq_level[8] = { 0 };
171      int i = 0;
172143      for (i = 0; i < 8; i++)
173         if (irq & (1 << i))
174            irq_level[metro_irq_levels[i] & 7] = 1;
144         if (BIT(irq, i))
145            irq_level[state->irq_levels[i] & 7] = 1;
146
175147      for (i = 0; i < 8; i++)
176         cputag_set_input_line(machine, "maincpu", i, irq_level[i] ? ASSERT_LINE : CLEAR_LINE);
148         cpu_set_input_line(state->maincpu, i, irq_level[i] ? ASSERT_LINE : CLEAR_LINE);
177149   }
178150   else
179151   {
180      /*  This is for games where every IRQ source generates the same
181            IRQ level. The interrupt service routine then reads the actual
182            source by peeking a register (metro_irq_cause_r) */
152      /*  This is for games where every IRQ source generates the same IRQ level. The interrupt service routine
153            then reads the actual source by peeking a register (metro_irq_cause_r) */
183154
184      int state =   (irq ? ASSERT_LINE : CLEAR_LINE);
185      cputag_set_input_line(machine, "maincpu", irq_line, state);
155      int irq_state = (irq ? ASSERT_LINE : CLEAR_LINE);
156      cpu_set_input_line(state->maincpu, state->irq_line, irq_state);
186157   }
187158}
188159
189160
190161/* For games that supply an *IRQ Vector* on the data bus */
191static IRQ_CALLBACK(metro_irq_callback)
162static IRQ_CALLBACK( metro_irq_callback )
192163{
193//  logerror("%s: irq callback returns %04X\n",cpuexec_describe_context(device->machine),metro_irq_vectors[int_level]);
194   return metro_irq_vectors[irqline] & 0xff;
195}
164   metro_state *state = (metro_state *)device->machine->driver_data;
196165
197static MACHINE_RESET( metro )
198{
199   if (irq_line == -1)
200      cpu_set_irq_callback(devtag_get_device(machine, "maincpu"), metro_irq_callback);
166   // logerror("%s: irq callback returns %04X\n", cpuexec_describe_context(device->machine), state->irq_vectors[int_level]);
167   return state->irq_vectors[irqline] & 0xff;
201168}
202169
203170
204171static WRITE16_HANDLER( metro_irq_cause_w )
205172{
206//if (data & ~0x15) logerror("CPU #0 PC %06X : unknown bits of irqcause written: %04X\n",cpu_get_pc(space->cpu),data);
173   metro_state *state = (metro_state *)space->machine->driver_data;
207174
175   //if (data & ~0x15) logerror("CPU #0 PC %06X : unknown bits of irqcause written: %04X\n", cpu_get_pc(space->cpu), data);
176
208177   if (ACCESSING_BITS_0_7)
209178   {
210      data &= ~*metro_irq_enable;
179      data &= ~*state->irq_enable;
211180
212      if (data & 0x01)   requested_int[0] = 0;
213      if (data & 0x02)   requested_int[1] = 0;   // DAITORIDE, BALCUBE, KARATOUR, MOUJA
214      if (data & 0x04)   requested_int[2] = 0;
215      if (data & 0x08)   requested_int[3] = 0;   // KARATOUR
216      if (data & 0x10)   requested_int[4] = 0;
217      if (data & 0x20)   requested_int[5] = 0;   // KARATOUR, BLZNTRND
218      if (data & 0x40)   requested_int[6] = 0;
219      if (data & 0x80)   requested_int[7] = 0;
181      if (BIT(data, 0))  state->requested_int[0] = 0;
182      if (BIT(data, 1))  state->requested_int[1] = 0;   // DAITORIDE, BALCUBE, KARATOUR, MOUJA
183      if (BIT(data, 2))  state->requested_int[2] = 0;
184      if (BIT(data, 3))  state->requested_int[3] = 0;   // KARATOUR
185      if (BIT(data, 4))  state->requested_int[4] = 0;
186      if (BIT(data, 5))  state->requested_int[5] = 0;   // KARATOUR, BLZNTRND
187      if (BIT(data, 6))  state->requested_int[6] = 0;
188      if (BIT(data, 7))  state->requested_int[7] = 0;
220189   }
221190
222191   update_irq_state(space->machine);
r7640r7641
225194
226195static INTERRUPT_GEN( metro_interrupt )
227196{
228   switch ( cpu_getiloops(device) )
197   metro_state *state = (metro_state *)device->machine->driver_data;
198
199   switch (cpu_getiloops(device))
229200   {
230201      case 0:
231         requested_int[0] = 1;
202         state->requested_int[0] = 1;
232203         update_irq_state(device->machine);
233204         break;
234205
235206      default:
236         requested_int[4] = 1;
207         state->requested_int[4] = 1;
237208         update_irq_state(device->machine);
238209         break;
239210   }
r7640r7641
242213/* Lev 1. Lev 2 seems sound related */
243214static INTERRUPT_GEN( bangball_interrupt )
244215{
245   requested_int[0] = 1;   // set scroll regs if a flag is set
246   requested_int[4] = 1;   // clear that flag
216   metro_state *state = (metro_state *)device->machine->driver_data;
217
218   state->requested_int[0] = 1;   // set scroll regs if a flag is set
219   state->requested_int[4] = 1;   // clear that flag
247220   update_irq_state(device->machine);
248221}
249222
223static INTERRUPT_GEN( msgogo_interrupt )
224{
225    metro_state *state = (metro_state *)device->machine->driver_data;
250226
227    switch (cpu_getiloops(device))
228    {
229        case 10:
230            state->requested_int[0] = 1;
231            update_irq_state(device->machine);
232            break;
233
234        case 224:
235            state->requested_int[4] = 1;
236            update_irq_state(device->machine);
237            break;
238    }
239}
240
241
251242static TIMER_CALLBACK( vblank_end_callback )
252243{
253   requested_int[5] = param;
244   metro_state *state = (metro_state *)machine->driver_data;
245   state->requested_int[5] = param;
254246}
255247
256248/* lev 2-7 (lev 1 seems sound related) */
257249static INTERRUPT_GEN( karatour_interrupt )
258250{
259   switch ( cpu_getiloops(device) )
251   metro_state *state = (metro_state *)device->machine->driver_data;
252
253   switch (cpu_getiloops(device))
260254   {
261255      case 0:
262         requested_int[0] = 1;
263         requested_int[5] = 1;   // write the scroll registers
256         state->requested_int[0] = 1;
257         state->requested_int[5] = 1;   // write the scroll registers
264258         /* the duration is a guess */
265259         timer_set(device->machine, ATTOTIME_IN_USEC(2500), NULL, 0, vblank_end_callback);
266260         update_irq_state(device->machine);
267261         break;
268262
269263      default:
270         requested_int[4] = 1;
264         state->requested_int[4] = 1;
271265         update_irq_state(device->machine);
272266         break;
273267   }
274268}
275269
276static emu_timer *mouja_irq_timer;
277270
278271static TIMER_CALLBACK( mouja_irq_callback )
279272{
280   requested_int[0] = 1;
273   metro_state *state = (metro_state *)machine->driver_data;
274
275   state->requested_int[0] = 1;
281276   update_irq_state(machine);
282277}
283278
284279static WRITE16_HANDLER( mouja_irq_timer_ctrl_w )
285280{
281   metro_state *state = (metro_state *)space->machine->driver_data;
286282   double freq = 58.0 + (0xff - (data & 0xff)) / 2.2;               /* 0xff=58Hz, 0x80=116Hz? */
287   timer_adjust_periodic(mouja_irq_timer, attotime_zero, 0, ATTOTIME_IN_HZ(freq));
283
284   timer_adjust_periodic(state->mouja_irq_timer, attotime_zero, 0, ATTOTIME_IN_HZ(freq));
288285}
289286
290287static INTERRUPT_GEN( mouja_interrupt )
291288{
292   requested_int[1] = 1;
289   metro_state *state = (metro_state *)device->machine->driver_data;
290
291   state->requested_int[1] = 1;
293292   update_irq_state(device->machine);
294293}
295294
296295
297296static INTERRUPT_GEN( gakusai_interrupt )
298297{
299   switch ( cpu_getiloops(device) )
298   metro_state *state = (metro_state *)device->machine->driver_data;
299
300   switch (cpu_getiloops(device))
300301   {
301302      case 0:
302         requested_int[1] = 1;
303         state->requested_int[1] = 1;
303304         update_irq_state(device->machine);
304305         break;
305306   }
r7640r7641
307308
308309static INTERRUPT_GEN( dokyusei_interrupt )
309310{
310   switch ( cpu_getiloops(device) )
311   metro_state *state = (metro_state *)device->machine->driver_data;
312
313   switch (cpu_getiloops(device))
311314   {
312315      case 0:
313         requested_int[1] = 1;
316         state->requested_int[1] = 1;
314317         update_irq_state(device->machine);
315318         break;
316319      case 1:   // needed?
317         requested_int[5] = 1;
320         state->requested_int[5] = 1;
318321         update_irq_state(device->machine);
319322         break;
320323   }
321324}
322325
323static void ymf278b_interrupt(running_device *device, int active)
326static void ymf278b_interrupt( running_device *device, int active )
324327{
325   cputag_set_input_line(device->machine, "maincpu", 2, active);
328   metro_state *state = (metro_state *)device->machine->driver_data;
329   cpu_set_input_line(state->maincpu, 2, active);
326330}
327331
328332/***************************************************************************
r7640r7641
333337
334338***************************************************************************/
335339
336static UINT16 metro_soundstatus;
337static int porta, portb, busy_sndcpu;
338
339static int metro_io_callback(running_device *device, int ioline, int state)
340static int metro_io_callback( running_device *device, int ioline, int state )
340341{
341   const address_space *space = cputag_get_address_space(device->machine, "maincpu", ADDRESS_SPACE_PROGRAM);
342
342   metro_state *driver_state = (metro_state *)device->machine->driver_data;
343   const address_space *space = cpu_get_address_space(driver_state->maincpu, ADDRESS_SPACE_PROGRAM);
343344   UINT8 data = 0;
344345
345   switch ( ioline )
346   switch (ioline)
346347   {
347348      case UPD7810_RXD:   /* read the RxD line */
348         data = soundlatch_r(space,0);
349         data = soundlatch_r(space, 0);
349350         state = data & 1;
350351         soundlatch_w(space, 0, data >> 1);
351352         break;
r7640r7641
358359
359360static WRITE16_HANDLER( metro_soundlatch_w )
360361{
362   metro_state *state = (metro_state *)space->machine->driver_data;
363
361364   if (ACCESSING_BITS_0_7)
362365   {
363      soundlatch_w(space,0,data & 0xff);
364      cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
366      soundlatch_w(space, 0, data & 0xff);
367      cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE);
365368      cpu_spinuntil_int(space->cpu);
366      busy_sndcpu = 1;
369      state->busy_sndcpu = 1;
367370   }
368371}
369372
370373
371374static READ16_HANDLER( metro_soundstatus_r )
372375{
373   return (busy_sndcpu ? 0x00 : 0x01);
376   metro_state *state = (metro_state *)space->machine->driver_data;
377   return (state->busy_sndcpu ? 0x00 : 0x01);
374378}
375379
376380static CUSTOM_INPUT( custom_soundstatus_r )
377381{
378   return (busy_sndcpu ? 0x01 : 0x00);
382   metro_state *state = (metro_state *)field->port->machine->driver_data;
383   return (state->busy_sndcpu ? 0x01 : 0x00);
379384}
380385
381386static WRITE16_HANDLER( metro_soundstatus_w )
382387{
388   metro_state *state = (metro_state *)space->machine->driver_data;
389
383390   if (ACCESSING_BITS_0_7)
384      metro_soundstatus = data & 0x01;
391      state->soundstatus = data & 0x01;
385392}
386393
387394
r7640r7641
410417
411418static READ8_HANDLER( metro_porta_r )
412419{
413   return porta;
420   metro_state *state = (metro_state *)space->machine->driver_data;
421   return state->porta;
414422}
415423
416424static WRITE8_HANDLER( metro_porta_w )
417425{
418   porta = data;
426   metro_state *state = (metro_state *)space->machine->driver_data;
427   state->porta = data;
419428}
420429
421430static WRITE8_HANDLER( metro_portb_w )
r7640r7641
431440       0
432441    */
433442
434   if (BIT(portb,7) && !BIT(data,7))   /* clock 1->0 */
443   metro_state *state = (metro_state *)space->machine->driver_data;
444
445   if (BIT(state->portb, 7) && !BIT(data, 7))   /* clock 1->0 */
435446   {
436      busy_sndcpu = 0;
437      portb = data;
447      state->busy_sndcpu = 0;
448      state->portb = data;
438449      return;
439450   }
440451
441   if (BIT(portb,5) && !BIT(data,5))   /* clock 1->0 */
452   if (BIT(state->portb, 5) && !BIT(data, 5))   /* clock 1->0 */
442453   {
443      if (!BIT(data,2))
454      if (!BIT(data, 2))
444455      {
445         running_device *ym = devtag_get_device(space->machine, "ymsnd");
446         ym2413_w(ym,BIT(data,1),porta);
456         ym2413_w(state->ymsnd, BIT(data, 1), state->porta);
447457      }
448      portb = data;
458      state->portb = data;
449459      return;
450460   }
451461
452   if (BIT(portb,2) && !BIT(data,2))   /* clock 1->0 */
462   if (BIT(state->portb, 2) && !BIT(data, 2))   /* clock 1->0 */
453463   {
454464      /* write */
455      if (!BIT(data,4))
456         okim6295_w(devtag_get_device(space->machine, "oki"),0,porta);
465      if (!BIT(data, 4))
466         okim6295_w(state->oki, 0, state->porta);
457467   }
458   portb = data;
468
469   state->portb = data;
459470}
460471
461472
r7640r7641
471482       1 select YM2151 register or data port
472483       0
473484    */
485   metro_state *state = (metro_state *)space->machine->driver_data;
474486
475   if (BIT(portb,7) && !BIT(data,7))   /* clock 1->0 */
487   if (BIT(state->portb, 7) && !BIT(data, 7))   /* clock 1->0 */
476488   {
477      busy_sndcpu = 0;
478      portb = data;
489      state->busy_sndcpu = 0;
490      state->portb = data;
479491      return;
480492   }
481493
482   if (BIT(portb,6) && !BIT(data,6))   /* clock 1->0 */
494   if (BIT(state->portb, 6) && !BIT(data, 6))   /* clock 1->0 */
483495   {
484      running_device *ym = devtag_get_device(space->machine, "ymsnd");
485      if (!BIT(data,2))
496      if (!BIT(data, 2))
486497      {
487498         /* write */
488         ym2151_w(ym,BIT(data,1),porta);
499         ym2151_w(state->ymsnd, BIT(data, 1), state->porta);
489500      }
490      if (!BIT(data,3))
501
502      if (!BIT(data, 3))
491503      {
492504         /* read */
493         porta = ym2151_r(ym,BIT(data,1));
505         state->porta = ym2151_r(state->ymsnd, BIT(data, 1));
494506      }
495      portb = data;
507
508      state->portb = data;
496509      return;
497510   }
498511
499   if (BIT(portb,2) && !BIT(data,2))   /* clock 1->0 */
512   if (BIT(state->portb, 2) && !BIT(data, 2))   /* clock 1->0 */
500513   {
501514      /* write */
502      if (!BIT(data,4))
503         okim6295_w(devtag_get_device(space->machine, "oki"),0,porta);
515      if (!BIT(data, 4))
516         okim6295_w(state->oki, 0, state->porta);
504517   }
505   if (BIT(portb,3) && !BIT(data,3))   /* clock 1->0 */
518
519   if (BIT(state->portb, 3) && !BIT(data, 3))   /* clock 1->0 */
506520   {
507521      /* read */
508      if (!BIT(data,4))
509         porta = okim6295_r(devtag_get_device(space->machine, "oki"),0);
522      if (!BIT(data, 4))
523         state->porta = okim6295_r(state->oki, 0);
510524   }
511   portb = data;
525
526   state->portb = data;
512527}
513528
514static void metro_sound_irq_handler(running_device *device, int state)
529static void metro_sound_irq_handler( running_device *device, int state )
515530{
516   cputag_set_input_line(device->machine, "audiocpu", UPD7810_INTF2, state ? ASSERT_LINE : CLEAR_LINE);
531   metro_state *driver_state = (metro_state *)device->machine->driver_data;
532   cpu_set_input_line(driver_state->audiocpu, UPD7810_INTF2, state ? ASSERT_LINE : CLEAR_LINE);
517533}
518534
519535static const ym2151_interface ym2151_config =
r7640r7641
545561//      coin_lockout_w(space->machine, 0, data & 1);
546562//      coin_lockout_w(space->machine, 1, data & 2);
547563   }
548   if (data & ~3)   logerror("CPU #0 PC %06X : unknown bits of coin lockout written: %04X\n",cpu_get_pc(space->cpu),data);
564   if (data & ~3)   logerror("CPU #0 PC %06X : unknown bits of coin lockout written: %04X\n", cpu_get_pc(space->cpu), data);
549565}
550566
551567
552568static WRITE16_HANDLER( metro_coin_lockout_4words_w )
553569{
554//  coin_lockout_w( space->machine, (offset >> 1) & 1, offset & 1 );
555   if (data & ~1)   logerror("CPU #0 PC %06X : unknown bits of coin lockout written: %04X\n",cpu_get_pc(space->cpu),data);
570//  coin_lockout_w(space->machine, (offset >> 1) & 1, offset & 1);
571   if (data & ~1)   logerror("CPU #0 PC %06X : unknown bits of coin lockout written: %04X\n", cpu_get_pc(space->cpu), data);
556572}
557573
558574
r7640r7641
574590    that the blitter can readily use (which is a form of compression)
575591*/
576592
577static UINT16 *metro_rombank;
578
579593static READ16_HANDLER( metro_bankedrom_r )
580594{
581   UINT8 *ROM = memory_region( space->machine, "gfx1" );
582   size_t  len  = memory_region_length( space->machine, "gfx1" );
595   metro_state *state = (metro_state *)space->machine->driver_data;
596   UINT8 *ROM = memory_region(space->machine, "gfx1");
597   size_t len = memory_region_length(space->machine, "gfx1");
583598
584   offset = offset * 2 + 0x10000 * (*metro_rombank);
599   offset = offset * 2 + 0x10000 * (*state->rombank);
585600
586   if ( offset < len )   return ((ROM[offset+0]<<8)+ROM[offset+1]);
587   else            return 0xffff;
601   if (offset < len)
602      return ((ROM[offset + 0] << 8) + ROM[offset + 1]);
603   else
604      return 0xffff;
588605}
589606
590607
r7640r7641
636653
637654***************************************************************************/
638655
639static UINT16 *metro_blitter_regs;
640
641656static TIMER_CALLBACK( metro_blit_done )
642657{
643   requested_int[blitter_bit] = 1;
658   metro_state *state = (metro_state *)machine->driver_data;
659   state->requested_int[state->blitter_bit] = 1;
644660   update_irq_state(machine);
645661}
646662
647INLINE int blt_read(const UINT8 *ROM, const int offs)
663INLINE int blt_read( const UINT8 *ROM, const int offs )
648664{
649665   return ROM[offs];
650666}
651667
652INLINE void blt_write(const address_space *space, const int tmap, const offs_t offs, const UINT16 data, const UINT16 mask)
668INLINE void blt_write( const address_space *space, const int tmap, const offs_t offs, const UINT16 data, const UINT16 mask )
653669{
654   switch( tmap )
670   switch(tmap)
655671   {
656      case 1:   metro_vram_0_w(space,offs,data,mask);   break;
657      case 2:   metro_vram_1_w(space,offs,data,mask);   break;
658      case 3:   metro_vram_2_w(space,offs,data,mask);   break;
672      case 1:   metro_vram_0_w(space, offs, data, mask);   break;
673      case 2:   metro_vram_1_w(space, offs, data, mask);   break;
674      case 3:   metro_vram_2_w(space, offs, data, mask);   break;
659675   }
660//  logerror("%s : Blitter %X] %04X <- %04X & %04X\n",cpuexec_describe_context(space->machine),tmap,offs,data,mask);
676//  logerror("%s : Blitter %X] %04X <- %04X & %04X\n", cpuexec_describe_context(space->machine), tmap, offs, data, mask);
661677}
662678
663679
664680static WRITE16_HANDLER( metro_blitter_w )
665681{
666   COMBINE_DATA( &metro_blitter_regs[offset] );
682   metro_state *state = (metro_state *)space->machine->driver_data;
683   COMBINE_DATA(&state->blitter_regs[offset]);
667684
668   if (offset == 0xC/2)
685   if (offset == 0x0c / 2)
669686   {
670      UINT8 *src   =   memory_region(space->machine, "gfx1");
671      size_t  src_len   =   memory_region_length(space->machine, "gfx1");
687      UINT8 *src     = memory_region(space->machine, "gfx1");
688      size_t src_len = memory_region_length(space->machine, "gfx1");
672689
673      UINT32 tmap      =   (metro_blitter_regs[ 0x00 / 2 ] << 16 ) +
674                      metro_blitter_regs[ 0x02 / 2 ];
675      UINT32 src_offs   =   (metro_blitter_regs[ 0x04 / 2 ] << 16 ) +
676                      metro_blitter_regs[ 0x06 / 2 ];
677      UINT32 dst_offs   =   (metro_blitter_regs[ 0x08 / 2 ] << 16 ) +
678                      metro_blitter_regs[ 0x0a / 2 ];
690      UINT32 tmap     = (state->blitter_regs[0x00 / 2] << 16) + state->blitter_regs[0x02 / 2];
691      UINT32 src_offs = (state->blitter_regs[0x04 / 2] << 16) + state->blitter_regs[0x06 / 2];
692      UINT32 dst_offs = (state->blitter_regs[0x08 / 2] << 16) + state->blitter_regs[0x0a / 2];
679693
680      int shift         =   (dst_offs & 0x80) ? 0 : 8;
681      UINT16 mask      =   (dst_offs & 0x80) ? 0x00ff : 0xff00;
694      int shift   = (dst_offs & 0x80) ? 0 : 8;
695      UINT16 mask = (dst_offs & 0x80) ? 0x00ff : 0xff00;
682696
683//      logerror("CPU #0 PC %06X : Blitter regs %08X, %08X, %08X\n",cpu_get_pc(space->cpu),tmap,src_offs,dst_offs);
697//      logerror("CPU #0 PC %06X : Blitter regs %08X, %08X, %08X\n", cpu_get_pc(space->cpu), tmap, src_offs, dst_offs);
684698
685      dst_offs >>= 7+1;
686      switch( tmap )
699      dst_offs >>= 7 + 1;
700      switch (tmap)
687701      {
688702         case 1:
689703         case 2:
690704         case 3:
691705            break;
692706         default:
693            logerror("CPU #0 PC %06X : Blitter unknown destination: %08X\n",cpu_get_pc(space->cpu),tmap);
707            logerror("CPU #0 PC %06X : Blitter unknown destination: %08X\n", cpu_get_pc(space->cpu), tmap);
694708            return;
695709      }
696710
697711      while (1)
698712      {
699         UINT16 b1,b2,count;
713         UINT16 b1, b2, count;
700714
701715         src_offs %= src_len;
702         b1 = blt_read(src,src_offs);
703//          logerror("CPU #0 PC %06X : Blitter opcode %02X at %06X\n",cpu_get_pc(space->cpu),b1,src_offs);
716         b1 = blt_read(src, src_offs);
717//          logerror("CPU #0 PC %06X : Blitter opcode %02X at %06X\n", cpu_get_pc(space->cpu), b1, src_offs);
704718         src_offs++;
705719
706720         count = ((~b1) & 0x3f) + 1;
707721
708         switch( (b1 & 0xc0) >> 6 )
722         switch ((b1 & 0xc0) >> 6)
709723         {
710            case 0:
711
712               /* Stop and Generate an IRQ. We can't generate it now
724         case 0:
725            /* Stop and Generate an IRQ. We can't generate it now
713726                       both because it's unlikely that the blitter is so
714727                       fast and because some games (e.g. lastfort) need to
715728                       complete the blitter irq service routine before doing
716729                       another blit. */
717               if (b1 == 0)
718               {
719                  timer_set(space->machine, ATTOTIME_IN_USEC(500), NULL,0,metro_blit_done);
720                  return;
721               }
730            if (b1 == 0)
731            {
732               timer_set(space->machine, ATTOTIME_IN_USEC(500), NULL, 0, metro_blit_done);
733               return;
734            }
722735
723               /* Copy */
724               while (count--)
725               {
726                  src_offs %= src_len;
727                  b2 = blt_read(src,src_offs) << shift;
728                  src_offs++;
729
730                  dst_offs &= 0xffff;
731                  blt_write(space,tmap,dst_offs,b2,mask);
732                  dst_offs = ((dst_offs+1) & (0x100-1)) | (dst_offs & (~(0x100-1)));
733               }
734               break;
735
736
737            case 1:
738
739               /* Fill with an increasing value */
736            /* Copy */
737            while (count--)
738            {
740739               src_offs %= src_len;
741               b2 = blt_read(src,src_offs);
740               b2 = blt_read(src, src_offs) << shift;
742741               src_offs++;
743742
744               while (count--)
745               {
746                  dst_offs &= 0xffff;
747                  blt_write(space,tmap,dst_offs,b2<<shift,mask);
748                  dst_offs = ((dst_offs+1) & (0x100-1)) | (dst_offs & (~(0x100-1)));
749                  b2++;
750               }
751               break;
743               dst_offs &= 0xffff;
744               blt_write(space, tmap, dst_offs, b2, mask);
745               dst_offs = ((dst_offs + 1) & (0x100 - 1)) | (dst_offs & (~(0x100 - 1)));
746            }
747            break;
752748
749         case 1:
750            /* Fill with an increasing value */
751            src_offs %= src_len;
752            b2 = blt_read(src, src_offs);
753            src_offs++;
753754
754            case 2:
755            while (count--)
756            {
757               dst_offs &= 0xffff;
758               blt_write(space, tmap, dst_offs, b2 << shift, mask);
759               dst_offs = ((dst_offs + 1) & (0x100 - 1)) | (dst_offs & (~(0x100 - 1)));
760               b2++;
761            }
762            break;
755763
756               /* Fill with a fixed value */
757               src_offs %= src_len;
758               b2 = blt_read(src,src_offs) << shift;
759               src_offs++;
764         case 2:
765            /* Fill with a fixed value */
766            src_offs %= src_len;
767            b2 = blt_read(src, src_offs) << shift;
768            src_offs++;
760769
761               while (count--)
762               {
763                  dst_offs &= 0xffff;
764                  blt_write(space,tmap,dst_offs,b2,mask);
765                  dst_offs = ((dst_offs+1) & (0x100-1)) | (dst_offs & (~(0x100-1)));
766               }
767               break;
770            while (count--)
771            {
772               dst_offs &= 0xffff;
773               blt_write(space, tmap, dst_offs, b2, mask);
774               dst_offs = ((dst_offs + 1) & (0x100 - 1)) | (dst_offs & (~(0x100 - 1)));
775            }
776            break;
768777
778         case 3:
779            /* Skip to the next line ?? */
780            if (b1 == 0xc0)
781            {
782               dst_offs +=   0x100;
783               dst_offs &= ~(0x100 - 1);
784               dst_offs |=  (0x100 - 1) & (state->blitter_regs[0x0a / 2] >> (7 + 1));
785            }
786            else
787            {
788               dst_offs += count;
789            }
790            break;
769791
770            case 3:
771
772               /* Skip to the next line ?? */
773               if (b1 == 0xC0)
774               {
775                  dst_offs +=   0x100;
776                  dst_offs &= ~(0x100-1);
777                  dst_offs |=  (0x100-1) & (metro_blitter_regs[ 0x0a / 2 ] >> (7+1));
778               }
779               else
780               {
781                  dst_offs += count;
782               }
783               break;
784
785
786            default:
787               logerror("CPU #0 PC %06X : Blitter unknown opcode %02X at %06X\n",cpu_get_pc(space->cpu),b1,src_offs-1);
788               return;
792         default:
793            logerror("CPU #0 PC %06X : Blitter unknown opcode %02X at %06X\n",cpu_get_pc(space->cpu),b1,src_offs-1);
794            return;
789795         }
790796
791797      }
792798   }
793
794799}
795800
796801
r7640r7641
817822ADDRESS_MAP_END
818823
819824static ADDRESS_MAP_START( metro_sound_io_map, ADDRESS_SPACE_IO, 8 )
820   AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(metro_porta_r,metro_porta_w)
825   AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(metro_porta_r, metro_porta_w)
821826   AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_WRITE(metro_portb_w)
822827   AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_WRITE(metro_sound_rombank_w)
823828ADDRESS_MAP_END
r7640r7641
826831
827832
828833static ADDRESS_MAP_START( daitorid_sound_io_map, ADDRESS_SPACE_IO, 8 )
829   AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(metro_porta_r,metro_porta_w)
834   AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(metro_porta_r, metro_porta_w)
830835   AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_WRITE(daitorid_portb_w)
831836   AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_WRITE(daitorid_sound_rombank_w)
832837ADDRESS_MAP_END
r7640r7641
842847   UINT16 dsw2 = input_port_read(space->machine, "DSW0") >> 8;
843848   UINT16 dsw3 = input_port_read(space->machine, "IN2");
844849
845   switch (offset*2)
850   switch (offset * 2)
846851   {
847      case 0x1FFFC:   return ((dsw1 & 0x01) ? 0x40 : 0) | ((dsw3 & 0x01) ? 0x80 : 0);
848      case 0x1FFFA:   return ((dsw1 & 0x02) ? 0x40 : 0) | ((dsw3 & 0x02) ? 0x80 : 0);
849      case 0x1FFF6:   return ((dsw1 & 0x04) ? 0x40 : 0) | ((dsw3 & 0x04) ? 0x80 : 0);
850      case 0x1FFEE:   return ((dsw1 & 0x08) ? 0x40 : 0) | ((dsw3 & 0x08) ? 0x80 : 0);
851      case 0x1FFDE:   return ((dsw1 & 0x10) ? 0x40 : 0) | ((dsw3 & 0x10) ? 0x80 : 0);
852      case 0x1FFBE:   return ((dsw1 & 0x20) ? 0x40 : 0) | ((dsw3 & 0x20) ? 0x80 : 0);
853      case 0x1FF7E:   return ((dsw1 & 0x40) ? 0x40 : 0) | ((dsw3 & 0x40) ? 0x80 : 0);
854      case 0x1FEFE:   return ((dsw1 & 0x80) ? 0x40 : 0) | ((dsw3 & 0x80) ? 0x80 : 0);
852      case 0x1FFFC:   return (BIT(dsw1, 0) ? 0x40 : 0) | (BIT(dsw3, 0) ? 0x80 : 0);
853      case 0x1FFFA:   return (BIT(dsw1, 1) ? 0x40 : 0) | (BIT(dsw3, 1) ? 0x80 : 0);
854      case 0x1FFF6:   return (BIT(dsw1, 2) ? 0x40 : 0) | (BIT(dsw3, 2) ? 0x80 : 0);
855      case 0x1FFEE:   return (BIT(dsw1, 3) ? 0x40 : 0) | (BIT(dsw3, 3) ? 0x80 : 0);
856      case 0x1FFDE:   return (BIT(dsw1, 4) ? 0x40 : 0) | (BIT(dsw3, 4) ? 0x80 : 0);
857      case 0x1FFBE:   return (BIT(dsw1, 5) ? 0x40 : 0) | (BIT(dsw3, 5) ? 0x80 : 0);
858      case 0x1FF7E:   return (BIT(dsw1, 6) ? 0x40 : 0) | (BIT(dsw3, 6) ? 0x80 : 0);
859      case 0x1FEFE:   return (BIT(dsw1, 7) ? 0x40 : 0) | (BIT(dsw3, 7) ? 0x80 : 0);
855860
856      case 0x1FDFE:   return (dsw2 & 0x01) ? 0x40 : 0;
857      case 0x1FBFE:   return (dsw2 & 0x02) ? 0x40 : 0;
858      case 0x1F7FE:   return (dsw2 & 0x04) ? 0x40 : 0;
859      case 0x1EFFE:   return (dsw2 & 0x08) ? 0x40 : 0;
860      case 0x1DFFE:   return (dsw2 & 0x10) ? 0x40 : 0;
861      case 0x1BFFE:   return (dsw2 & 0x20) ? 0x40 : 0;
862      case 0x17FFE:   return (dsw2 & 0x40) ? 0x40 : 0;
863      case 0x0FFFE:   return (dsw2 & 0x80) ? 0x40 : 0;
861      case 0x1FDFE:   return BIT(dsw2, 0) ? 0x40 : 0;
862      case 0x1FBFE:   return BIT(dsw2, 1) ? 0x40 : 0;
863      case 0x1F7FE:   return BIT(dsw2, 2) ? 0x40 : 0;
864      case 0x1EFFE:   return BIT(dsw2, 3) ? 0x40 : 0;
865      case 0x1DFFE:   return BIT(dsw2, 4) ? 0x40 : 0;
866      case 0x1BFFE:   return BIT(dsw2, 5) ? 0x40 : 0;
867      case 0x17FFE:   return BIT(dsw2, 6) ? 0x40 : 0;
868      case 0x0FFFE:   return BIT(dsw2, 7) ? 0x40 : 0;
864869   }
865   logerror("CPU #0 PC %06X : unknown dsw address read: %04X\n",cpu_get_pc(space->cpu),offset);
870   logerror("CPU #0 PC %06X : unknown dsw address read: %04X\n", cpu_get_pc(space->cpu), offset);
866871   return 0xffff;
867872}
868873
869874
870875static ADDRESS_MAP_START( balcube_map, ADDRESS_SPACE_PROGRAM, 16 )
871   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
872   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                       // RAM
876   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
877   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                 // RAM
873878   AM_RANGE(0x300000, 0x300001) AM_DEVREAD8("ymf", ymf278b_r, 0x00ff)               // Sound
874879   AM_RANGE(0x300000, 0x30000b) AM_DEVWRITE8("ymf", ymf278b_w, 0x00ff)               // Sound
875   AM_RANGE(0x400000, 0x41ffff) AM_READ(balcube_dsw_r)                           // DSW x 3
876   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN0")                           // Inputs
877   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("IN1")                           //
878   AM_RANGE(0x500006, 0x500007) AM_READNOP                                    //
880   AM_RANGE(0x400000, 0x41ffff) AM_READ(balcube_dsw_r)                        // DSW x 3
881   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN0")                        // Inputs
882   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("IN1")                        //
883   AM_RANGE(0x500006, 0x500007) AM_READNOP                              //
879884   AM_RANGE(0x500002, 0x500009) AM_WRITE(metro_coin_lockout_4words_w)               // Coin Lockout
880   AM_RANGE(0x600000, 0x61ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
881   AM_RANGE(0x620000, 0x63ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
882   AM_RANGE(0x640000, 0x65ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
883   AM_RANGE(0x660000, 0x66ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
885   AM_RANGE(0x600000, 0x61ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
886   AM_RANGE(0x620000, 0x63ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
887   AM_RANGE(0x640000, 0x65ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
888   AM_RANGE(0x660000, 0x66ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
884889   AM_RANGE(0x670000, 0x673fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
885   AM_RANGE(0x674000, 0x674fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
886   AM_RANGE(0x678000, 0x6787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
887   AM_RANGE(0x678840, 0x67884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
888   AM_RANGE(0x678860, 0x67886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
889   AM_RANGE(0x678870, 0x67887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
890   AM_RANGE(0x678880, 0x678881) AM_WRITENOP                                 // ? increasing
891   AM_RANGE(0x678890, 0x678891) AM_WRITENOP                                 // ? increasing
892   AM_RANGE(0x6788a2, 0x6788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
893   AM_RANGE(0x6788a4, 0x6788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
894   AM_RANGE(0x6788aa, 0x6788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
895   AM_RANGE(0x6788ac, 0x6788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
896   AM_RANGE(0x679700, 0x679713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
890   AM_RANGE(0x674000, 0x674fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
891   AM_RANGE(0x678000, 0x6787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
892   AM_RANGE(0x678840, 0x67884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
893   AM_RANGE(0x678860, 0x67886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
894   AM_RANGE(0x678870, 0x67887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
895   AM_RANGE(0x678880, 0x678881) AM_WRITENOP                              // ? increasing
896   AM_RANGE(0x678890, 0x678891) AM_WRITENOP                              // ? increasing
897   AM_RANGE(0x6788a2, 0x6788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
898   AM_RANGE(0x6788a4, 0x6788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
899   AM_RANGE(0x6788aa, 0x6788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
900   AM_RANGE(0x6788ac, 0x6788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
901   AM_RANGE(0x679700, 0x679713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
897902ADDRESS_MAP_END
898903
899904
r7640r7641
903908
904909
905910static ADDRESS_MAP_START( daitoa_map, ADDRESS_SPACE_PROGRAM, 16 )
906   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
907   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                     // RAM
911   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
912   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                               // RAM
908913   AM_RANGE(0x400000, 0x400001) AM_DEVREAD8("ymf", ymf278b_r, 0x00ff)               // Sound
909914   AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8("ymf", ymf278b_w, 0x00ff)               // Sound
910   AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r)                           // DSW x 3
911   AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0   )   // Layer 0
912   AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1   )   // Layer 1
913   AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2   )   // Layer 2
914   AM_RANGE(0x160000, 0x16ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
915   AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r)                        // DSW x 3
916   AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
917   AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
918   AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
919   AM_RANGE(0x160000, 0x16ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
915920   AM_RANGE(0x170000, 0x173fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
916   AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
917   AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
918   AM_RANGE(0x178840, 0x17884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
919   AM_RANGE(0x178860, 0x17886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
920   AM_RANGE(0x178870, 0x17887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
921   AM_RANGE(0x178880, 0x178881) AM_WRITENOP                                 // ? increasing
922   AM_RANGE(0x178890, 0x178891) AM_WRITENOP                                 // ? increasing
923   AM_RANGE(0x1788a2, 0x1788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
924   AM_RANGE(0x1788a4, 0x1788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
925   AM_RANGE(0x1788aa, 0x1788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
926   AM_RANGE(0x1788ac, 0x1788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
927   AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
928   AM_RANGE(0x200000, 0x200001) AM_READ_PORT("IN0")                           // Inputs
929   AM_RANGE(0x200002, 0x200003) AM_READ_PORT("IN1")                           //
930   AM_RANGE(0x200006, 0x200007) AM_READNOP                                    //
921   AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
922   AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
923   AM_RANGE(0x178840, 0x17884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
924   AM_RANGE(0x178860, 0x17886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
925   AM_RANGE(0x178870, 0x17887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
926   AM_RANGE(0x178880, 0x178881) AM_WRITENOP                              // ? increasing
927   AM_RANGE(0x178890, 0x178891) AM_WRITENOP                              // ? increasing
928   AM_RANGE(0x1788a2, 0x1788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
929   AM_RANGE(0x1788a4, 0x1788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
930   AM_RANGE(0x1788aa, 0x1788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
931   AM_RANGE(0x1788ac, 0x1788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
932   AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
933   AM_RANGE(0x200000, 0x200001) AM_READ_PORT("IN0")                        // Inputs
934   AM_RANGE(0x200002, 0x200003) AM_READ_PORT("IN1")                        //
935   AM_RANGE(0x200006, 0x200007) AM_READNOP                              //
931936   AM_RANGE(0x200002, 0x200009) AM_WRITE(metro_coin_lockout_4words_w)               // Coin Lockout
932937ADDRESS_MAP_END
933938
r7640r7641
937942***************************************************************************/
938943
939944static ADDRESS_MAP_START( bangball_map, ADDRESS_SPACE_PROGRAM, 16 )
940   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
941   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                       // RAM
942   AM_RANGE(0xf10000, 0xf10fff) AM_RAM                                       // RAM (bug in the ram test routine)
945   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
946   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                 // RAM
947   AM_RANGE(0xf10000, 0xf10fff) AM_RAM                                 // RAM (bug in the ram test routine)
943948   AM_RANGE(0xb00000, 0xb00001) AM_DEVREAD8("ymf", ymf278b_r, 0x00ff)               // Sound
944949   AM_RANGE(0xb00000, 0xb0000b) AM_DEVWRITE8("ymf", ymf278b_w, 0x00ff)               // Sound
945   AM_RANGE(0xc00000, 0xc1ffff) AM_READ(balcube_dsw_r)                           // DSW x 3
946   AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("IN0")                           // Inputs
947   AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("IN1")                           //
948   AM_RANGE(0xd00006, 0xd00007) AM_READNOP                                    //
950   AM_RANGE(0xc00000, 0xc1ffff) AM_READ(balcube_dsw_r)                        // DSW x 3
951   AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("IN0")                        // Inputs
952   AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("IN1")                        //
953   AM_RANGE(0xd00006, 0xd00007) AM_READNOP                              //
949954   AM_RANGE(0xd00002, 0xd00009) AM_WRITE(metro_coin_lockout_4words_w)               // Coin Lockout
950   AM_RANGE(0xe00000, 0xe1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
951   AM_RANGE(0xe20000, 0xe3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
952   AM_RANGE(0xe40000, 0xe5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
953   AM_RANGE(0xe60000, 0xe6ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
955   AM_RANGE(0xe00000, 0xe1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
956   AM_RANGE(0xe20000, 0xe3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
957   AM_RANGE(0xe40000, 0xe5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
958   AM_RANGE(0xe60000, 0xe6ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
954959   AM_RANGE(0xe70000, 0xe73fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
955   AM_RANGE(0xe74000, 0xe74fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
956   AM_RANGE(0xe78000, 0xe787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
957   AM_RANGE(0xe78840, 0xe7884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
958   AM_RANGE(0xe78860, 0xe7886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
959   AM_RANGE(0xe78870, 0xe7887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
960   AM_RANGE(0xe78880, 0xe78881) AM_WRITENOP                                 // ? increasing
961   AM_RANGE(0xe78890, 0xe78891) AM_WRITENOP                                 // ? increasing
962   AM_RANGE(0xe788a2, 0xe788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
963   AM_RANGE(0xe788a4, 0xe788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
964   AM_RANGE(0xe788aa, 0xe788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
965   AM_RANGE(0xe788ac, 0xe788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
966   AM_RANGE(0xe79700, 0xe79713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
960   AM_RANGE(0xe74000, 0xe74fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
961   AM_RANGE(0xe78000, 0xe787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
962   AM_RANGE(0xe78840, 0xe7884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
963   AM_RANGE(0xe78860, 0xe7886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
964   AM_RANGE(0xe78870, 0xe7887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
965   AM_RANGE(0xe78880, 0xe78881) AM_WRITENOP                              // ? increasing
966   AM_RANGE(0xe78890, 0xe78891) AM_WRITENOP                              // ? increasing
967   AM_RANGE(0xe788a2, 0xe788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
968   AM_RANGE(0xe788a4, 0xe788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
969   AM_RANGE(0xe788aa, 0xe788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
970   AM_RANGE(0xe788ac, 0xe788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
971   AM_RANGE(0xe79700, 0xe79713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
967972ADDRESS_MAP_END
968973
969974
r7640r7641
972977***************************************************************************/
973978
974979static ADDRESS_MAP_START( batlbubl_map, ADDRESS_SPACE_PROGRAM, 16 )
975   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                       // ROM
976   AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
977   AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
978   AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
979   AM_RANGE(0x160000, 0x16ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
980   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                 // ROM
981   AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
982   AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
983   AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
984   AM_RANGE(0x160000, 0x16ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
980985   AM_RANGE(0x170000, 0x173fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
981   AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
982   AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
983   AM_RANGE(0x178840, 0x17884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
984   AM_RANGE(0x178860, 0x17886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
985   AM_RANGE(0x178870, 0x17887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
986   AM_RANGE(0x178880, 0x178881) AM_WRITENOP                                 // ? increasing
987   AM_RANGE(0x178890, 0x178891) AM_WRITENOP                                 // ? increasing
988   AM_RANGE(0x1788a2, 0x1788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
989   AM_RANGE(0x1788a4, 0x1788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
990   AM_RANGE(0x1788aa, 0x1788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
991   AM_RANGE(0x1788ac, 0x1788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
992   AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
986   AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
987   AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
988   AM_RANGE(0x178840, 0x17884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
989   AM_RANGE(0x178860, 0x17886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
990   AM_RANGE(0x178870, 0x17887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
991   AM_RANGE(0x178880, 0x178881) AM_WRITENOP                              // ? increasing
992   AM_RANGE(0x178890, 0x178891) AM_WRITENOP                              // ? increasing
993   AM_RANGE(0x1788a2, 0x1788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
994   AM_RANGE(0x1788a4, 0x1788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
995   AM_RANGE(0x1788aa, 0x1788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
996   AM_RANGE(0x1788ac, 0x1788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
997   AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
993998   AM_RANGE(0x200000, 0x200001) AM_READ_PORT("IN1")
994999   AM_RANGE(0x200002, 0x200003) AM_READ_PORT("DSW0")
9951000   AM_RANGE(0x200004, 0x200005) AM_READ_PORT("IN0")
9961001   AM_RANGE(0x200006, 0x200007) AM_READ_PORT("IN2")
9971002   AM_RANGE(0x200002, 0x200009) AM_WRITE(metro_coin_lockout_4words_w)               // Coin Lockout
998   AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r)                           // read but ignored?
999   AM_RANGE(0x400000, 0x400001) AM_DEVREADWRITE8("ymf", ymf278b_r,ymf278b_w, 0x00ff)   // Sound
1000   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                       // RAM
1001   AM_RANGE(0xf10000, 0xf10fff) AM_RAM                                       // RAM (bug in the ram test routine)
1003   AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r)                        // read but ignored?
1004   AM_RANGE(0x400000, 0x400001) AM_DEVREAD8("ymf", ymf278b_r, 0x00ff)               // Sound
1005   AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8("ymf", ymf278b_w, 0x00ff)               //
1006   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                 // RAM
1007   AM_RANGE(0xf10000, 0xf10fff) AM_RAM                                 // RAM (bug in the ram test routine)
10021008ADDRESS_MAP_END
10031009
10041010
10051011/***************************************************************************
1006                                Dai Toride
1012                             Mouse Shooter GoGo
10071013***************************************************************************/
10081014
1015static ADDRESS_MAP_START( msgogo_map, ADDRESS_SPACE_PROGRAM, 16 )
1016   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
1017   AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1018   AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1019   AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1020   AM_RANGE(0x160000, 0x16ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
1021   AM_RANGE(0x170000, 0x173fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1022   AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1023   AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1024   AM_RANGE(0x178840, 0x17884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1025   AM_RANGE(0x178860, 0x17886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1026   AM_RANGE(0x178870, 0x17887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1027   AM_RANGE(0x178880, 0x178881) AM_WRITENOP                              // ? increasing
1028   AM_RANGE(0x178890, 0x178891) AM_WRITENOP                              // ? increasing
1029   AM_RANGE(0x1788a2, 0x1788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1030   AM_RANGE(0x1788a4, 0x1788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
1031   AM_RANGE(0x1788aa, 0x1788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1032   AM_RANGE(0x1788ac, 0x1788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1033   AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1034   AM_RANGE(0x200000, 0x200001) AM_READ_PORT("COINS")                        // Inputs
1035   AM_RANGE(0x200002, 0x200003) AM_READ_PORT("JOYS")                        //
1036   AM_RANGE(0x200006, 0x200007) AM_READNOP                              //
1037   AM_RANGE(0x200002, 0x200009) AM_WRITE(metro_coin_lockout_4words_w)               // Coin Lockout
1038   AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r)                        // 3 x DSW
1039   AM_RANGE(0x400000, 0x400001) AM_DEVREAD8("ymf", ymf278b_r, 0x00ff)               // Sound
1040   AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8("ymf", ymf278b_w, 0x00ff)               //
1041   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                 // RAM
1042ADDRESS_MAP_END
1043
1044/***************************************************************************
1045                                Daitoride
1046***************************************************************************/
1047
10091048static ADDRESS_MAP_START( daitorid_map, ADDRESS_SPACE_PROGRAM, 16 )
1010   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1011   AM_RANGE(0x800000, 0x80ffff) AM_RAM                                       // RAM
1012   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0   )   // Layer 0
1013   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1   )   // Layer 1
1014   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2   )   // Layer 2
1015   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1049   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1050   AM_RANGE(0x800000, 0x80ffff) AM_RAM                                 // RAM
1051   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1052   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1053   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1054   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
10161055   AM_RANGE(0x470000, 0x473fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1017   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1018   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1019   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1020   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1021   AM_RANGE(0x478870, 0x47887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
1022   AM_RANGE(0x478880, 0x478881) AM_WRITENOP                                 // ? increasing
1023   AM_RANGE(0x478890, 0x478891) AM_WRITENOP                                 // ? increasing
1024   AM_RANGE(0x4788a2, 0x4788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1025   AM_RANGE(0x4788a4, 0x4788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1056   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1057   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1058   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1059   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1060   AM_RANGE(0x478870, 0x47887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1061   AM_RANGE(0x478880, 0x478881) AM_WRITENOP                              // ? increasing
1062   AM_RANGE(0x478890, 0x478891) AM_WRITENOP                              // ? increasing
1063   AM_RANGE(0x4788a2, 0x4788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1064   AM_RANGE(0x4788a4, 0x4788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
10261065   AM_RANGE(0x4788a8, 0x4788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1027   AM_RANGE(0x4788aa, 0x4788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1028   AM_RANGE(0x4788ac, 0x4788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1029   AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1030   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)      // To Sound CPU
1066   AM_RANGE(0x4788aa, 0x4788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1067   AM_RANGE(0x4788ac, 0x4788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1068   AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1069   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)         // To Sound CPU
10311070   AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1")
10321071   AM_RANGE(0xc00004, 0xc00005) AM_READ_PORT("DSW0")
10331072   AM_RANGE(0xc00006, 0xc00007) AM_READ_PORT("IN2")
r7640r7641
10401079***************************************************************************/
10411080
10421081static ADDRESS_MAP_START( dharma_map, ADDRESS_SPACE_PROGRAM, 16 )
1043   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1044   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                       // RAM
1045   AM_RANGE(0x800000, 0x81ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0   )   // Layer 0
1046   AM_RANGE(0x820000, 0x83ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1   )   // Layer 1
1047   AM_RANGE(0x840000, 0x85ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2   )   // Layer 2
1048   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1082   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1083   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                 // RAM
1084   AM_RANGE(0x800000, 0x81ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1085   AM_RANGE(0x820000, 0x83ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1086   AM_RANGE(0x840000, 0x85ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1087   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
10491088   AM_RANGE(0x870000, 0x873fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1050   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1051   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size   )   // Tiles Set
1052   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1053   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window   )      // Tilemap Window
1054   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE(&metro_scroll)            // Scroll Regs
1055   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                                 // ? increasing
1056   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                                 // ? increasing
1057   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1089   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1090   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1091   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1092   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1093   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1094   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                              // ? increasing
1095   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                              // ? increasing
1096   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
10581097   AM_RANGE(0x8788a8, 0x8788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1059   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1060   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1061   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1062   AM_RANGE(0x879700, 0x879713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1063   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)      // To Sound CPU
1098   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1099   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1100   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1101   AM_RANGE(0x879700, 0x879713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1102   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)         // To Sound CPU
10641103   AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1")
10651104   AM_RANGE(0xc00004, 0xc00005) AM_READ_PORT("DSW0")
10661105   AM_RANGE(0xc00006, 0xc00007) AM_READ_PORT("IN2")
r7640r7641
10811120#define KARATOUR_VRAM( _n_ ) \
10821121static READ16_HANDLER( karatour_vram_##_n_##_r ) \
10831122{ \
1084   return metro_vram_##_n_[KARATOUR_OFFS(offset)]; \
1123   metro_state *state = (metro_state *)space->machine->driver_data; \
1124   return state->vram_##_n_[KARATOUR_OFFS(offset)]; \
10851125} \
10861126static WRITE16_HANDLER( karatour_vram_##_n_##_w ) \
10871127{ \
1088   metro_vram_##_n_##_w(space,KARATOUR_OFFS(offset),data,mem_mask); \
1128   metro_vram_##_n_##_w(space, KARATOUR_OFFS(offset), data, mem_mask); \
10891129}
10901130
10911131KARATOUR_VRAM( 0 )
r7640r7641
10931133KARATOUR_VRAM( 2 )
10941134
10951135static ADDRESS_MAP_START( karatour_map, ADDRESS_SPACE_PROGRAM, 16 )
1096   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
1097   AM_RANGE(0xffc000, 0xffffff) AM_RAM                                       // RAM
1098   AM_RANGE(0x400000, 0x400001) AM_READWRITE(metro_soundstatus_r,metro_soundstatus_w)   // From Sound CPU
1099   AM_RANGE(0x400002, 0x400003) AM_READ_PORT("IN0")                           // Inputs
1100   AM_RANGE(0x400002, 0x400003) AM_WRITE(metro_coin_lockout_1word_w)               // Coin Lockout
1101   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("IN1")                           //
1102   AM_RANGE(0x400006, 0x400007) AM_READ_PORT("DSW0")                           //
1103   AM_RANGE(0x40000a, 0x40000b) AM_READ_PORT("DSW1")                           //
1104   AM_RANGE(0x40000c, 0x40000d) AM_READ_PORT("IN2")                           //
1105   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1136   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
1137   AM_RANGE(0xffc000, 0xffffff) AM_RAM                                 // RAM
1138   AM_RANGE(0x400000, 0x400001) AM_READWRITE(metro_soundstatus_r, metro_soundstatus_w)         // From Sound CPU
1139   AM_RANGE(0x400002, 0x400003) AM_READ_PORT("IN0")                        // Inputs
1140   AM_RANGE(0x400002, 0x400003) AM_WRITE(metro_coin_lockout_1word_w)                  // Coin Lockout
1141   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("IN1")                        //
1142   AM_RANGE(0x400006, 0x400007) AM_READ_PORT("DSW0")                        //
1143   AM_RANGE(0x40000a, 0x40000b) AM_READ_PORT("DSW1")                        //
1144   AM_RANGE(0x40000c, 0x40000d) AM_READ_PORT("IN2")                        //
1145   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
11061146   AM_RANGE(0x870000, 0x873fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1107   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1108   AM_RANGE(0x875000, 0x875fff) AM_READWRITE(karatour_vram_0_r,karatour_vram_0_w)      // Layer 0 (Part of)
1109   AM_RANGE(0x876000, 0x876fff) AM_READWRITE(karatour_vram_1_r,karatour_vram_1_w)      // Layer 1 (Part of)
1110   AM_RANGE(0x877000, 0x877fff) AM_READWRITE(karatour_vram_2_r,karatour_vram_2_w)      // Layer 2 (Part of)
1111   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1112   AM_RANGE(0x878800, 0x878813) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1113   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1114   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1115   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
1116   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                                 // ? increasing
1117   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                                 // ? increasing
1118   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1119   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1147   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1148   AM_RANGE(0x875000, 0x875fff) AM_READWRITE(karatour_vram_0_r, karatour_vram_0_w)         // Layer 0 (Part of)
1149   AM_RANGE(0x876000, 0x876fff) AM_READWRITE(karatour_vram_1_r, karatour_vram_1_w)         // Layer 1 (Part of)
1150   AM_RANGE(0x877000, 0x877fff) AM_READWRITE(karatour_vram_2_r, karatour_vram_2_w)         // Layer 2 (Part of)
1151   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1152   AM_RANGE(0x878800, 0x878813) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1153   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1154   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1155   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1156   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                              // ? increasing
1157   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                              // ? increasing
1158   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1159   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
11201160   AM_RANGE(0x8788a8, 0x8788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1121   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1122   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1161   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1162   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
11231163ADDRESS_MAP_END
11241164
11251165
r7640r7641
11301170/* same limited tilemap access as karatour */
11311171
11321172static ADDRESS_MAP_START( kokushi_map, ADDRESS_SPACE_PROGRAM, 16 )
1133   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
1134   AM_RANGE(0x7fc000, 0x7fffff) AM_RAM                                       // RAM
1135   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1173   AM_RANGE(0x000000, 0x07ffff) AM_ROM                              // ROM
1174   AM_RANGE(0x7fc000, 0x7fffff) AM_RAM                              // RAM
1175   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                  // Banked ROM
11361176   AM_RANGE(0x870000, 0x873fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1137   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1138   AM_RANGE(0x875000, 0x875fff) AM_READWRITE(karatour_vram_0_r,karatour_vram_0_w)      // Layer 0 (Part of)
1139   AM_RANGE(0x876000, 0x876fff) AM_READWRITE(karatour_vram_1_r,karatour_vram_1_w)      // Layer 1 (Part of)
1140   AM_RANGE(0x877000, 0x877fff) AM_READWRITE(karatour_vram_2_r,karatour_vram_2_w)      // Layer 2 (Part of)
1141   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1142   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1143   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1144   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs - WRONG
1145//  AM_RANGE(0x878880, 0x878881) AM_WRITENOP                                            // ? increasing
1146   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                                 // ? increasing
1147   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause /  IRQ Acknowledge
1148   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1149   AM_RANGE(0x8788a8, 0x8788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1150   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1151   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1152   AM_RANGE(0x879700, 0x879713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1177   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)            // Sprites
1178   AM_RANGE(0x875000, 0x875fff) AM_READWRITE(karatour_vram_0_r, karatour_vram_0_w)      // Layer 0 (Part of)
1179   AM_RANGE(0x876000, 0x876fff) AM_READWRITE(karatour_vram_1_r, karatour_vram_1_w)      // Layer 1 (Part of)
1180   AM_RANGE(0x877000, 0x877fff) AM_READWRITE(karatour_vram_2_r, karatour_vram_2_w)      // Layer 2 (Part of)
1181   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1182   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1183   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)   // Tilemap Window
1184   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)         // Scroll Regs - WRONG
1185//  AM_RANGE(0x878880, 0x878881) AM_WRITENOP                                                    // ? increasing
1186   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                           // ? increasing
1187   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)      // IRQ Cause /  IRQ Acknowledge
1188   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)      // IRQ Enable
1189   AM_RANGE(0x8788a8, 0x8788a9) AM_WRITE(metro_soundlatch_w)                  // To Sound CPU
1190   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)      // Rom Bank
1191   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)      // Screen Control
1192   AM_RANGE(0x879700, 0x879713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)      // Video Registers
11531193   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)      // To Sound CPU
1154   AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1")                           // Inputs
1194   AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1")                     // Inputs
11551195   AM_RANGE(0xc00004, 0xc00005) AM_READ_PORT("DSW0")
11561196   AM_RANGE(0xc00002, 0xc00009) AM_WRITE(metro_coin_lockout_4words_w   )            // Coin Lockout
11571197ADDRESS_MAP_END
r7640r7641
11621202***************************************************************************/
11631203
11641204static ADDRESS_MAP_START( lastfort_map, ADDRESS_SPACE_PROGRAM, 16 )
1165   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1166   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                       // RAM
1167   AM_RANGE(0x800000, 0x81ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1168   AM_RANGE(0x820000, 0x83ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1169   AM_RANGE(0x840000, 0x85ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1170   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1205   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1206   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                 // RAM
1207   AM_RANGE(0x800000, 0x81ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1208   AM_RANGE(0x820000, 0x83ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1209   AM_RANGE(0x840000, 0x85ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1210   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
11711211   AM_RANGE(0x870000, 0x873fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1172   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1173   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1174   AM_RANGE(0x878800, 0x878813) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1175   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1176   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1177   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
1178   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                                 // ? increasing
1179   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                                 // ? increasing
1180   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1181   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1212   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1213   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1214   AM_RANGE(0x878800, 0x878813) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1215   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1216   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1217   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1218   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                              // ? increasing
1219   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                              // ? increasing
1220   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1221   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
11821222   AM_RANGE(0x8788a8, 0x8788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1183   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1184   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1185   AM_RANGE(0xc00000, 0xc00001) AM_READWRITE(metro_soundstatus_r,metro_soundstatus_w)   // From / To Sound CPU
1186   AM_RANGE(0xc00002, 0xc00003) AM_WRITE(metro_coin_lockout_1word_w)               // Coin Lockout
1187   AM_RANGE(0xc00004, 0xc00005) AM_READ_PORT("IN0")                           // Inputs
1188   AM_RANGE(0xc00006, 0xc00007) AM_READ_PORT("IN1")                           //
1189   AM_RANGE(0xc00008, 0xc00009) AM_READ_PORT("IN2")                           //
1190   AM_RANGE(0xc0000a, 0xc0000b) AM_READ_PORT("DSW0")                           //
1191   AM_RANGE(0xc0000c, 0xc0000d) AM_READ_PORT("DSW1")                           //
1192   AM_RANGE(0xc0000e, 0xc0000f) AM_READ_PORT("IN3")                           //
1223   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1224   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1225   AM_RANGE(0xc00000, 0xc00001) AM_READWRITE(metro_soundstatus_r, metro_soundstatus_w)         // From / To Sound CPU
1226   AM_RANGE(0xc00002, 0xc00003) AM_WRITE(metro_coin_lockout_1word_w)                  // Coin Lockout
1227   AM_RANGE(0xc00004, 0xc00005) AM_READ_PORT("IN0")                        // Inputs
1228   AM_RANGE(0xc00006, 0xc00007) AM_READ_PORT("IN1")                        //
1229   AM_RANGE(0xc00008, 0xc00009) AM_READ_PORT("IN2")                        //
1230   AM_RANGE(0xc0000a, 0xc0000b) AM_READ_PORT("DSW0")                        //
1231   AM_RANGE(0xc0000c, 0xc0000d) AM_READ_PORT("DSW1")                        //
1232   AM_RANGE(0xc0000e, 0xc0000f) AM_READ_PORT("IN3")                        //
11931233ADDRESS_MAP_END
11941234
11951235/* the German version is halfway between lastfort and ladykill (karatour) memory maps */
11961236
11971237/* todo: clean up input reads etc. */
11981238static ADDRESS_MAP_START( lastforg_map, ADDRESS_SPACE_PROGRAM, 16 )
1199   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1200   AM_RANGE(0x400000, 0x400001) AM_READWRITE(metro_soundstatus_r,metro_soundstatus_w)   // From / To Sound CPU
1201   AM_RANGE(0x400002, 0x400003) AM_READ_PORT("IN0")                           // Inputs
1202   AM_RANGE(0x400002, 0x400003) AM_WRITE(metro_coin_lockout_1word_w)               // Coin Lockout
1203   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("IN1")                           //
1204   AM_RANGE(0x400006, 0x400007) AM_READ_PORT("DSW0")                           //
1205   AM_RANGE(0x40000a, 0x40000b) AM_READ_PORT("DSW1")                           //
1206   AM_RANGE(0x40000c, 0x40000d) AM_READ_PORT("IN2")                           //
1207   AM_RANGE(0x880000, 0x89ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1208   AM_RANGE(0x8a0000, 0x8bffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1209   AM_RANGE(0x8c0000, 0x8dffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1210   AM_RANGE(0x8e0000, 0x8effff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1239   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1240   AM_RANGE(0x400000, 0x400001) AM_READWRITE(metro_soundstatus_r, metro_soundstatus_w)         // From / To Sound CPU
1241   AM_RANGE(0x400002, 0x400003) AM_READ_PORT("IN0")                        // Inputs
1242   AM_RANGE(0x400002, 0x400003) AM_WRITE(metro_coin_lockout_1word_w)                  // Coin Lockout
1243   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("IN1")                        //
1244   AM_RANGE(0x400006, 0x400007) AM_READ_PORT("DSW0")                        //
1245   AM_RANGE(0x40000a, 0x40000b) AM_READ_PORT("DSW1")                        //
1246   AM_RANGE(0x40000c, 0x40000d) AM_READ_PORT("IN2")                        //
1247   AM_RANGE(0x880000, 0x89ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1248   AM_RANGE(0x8a0000, 0x8bffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1249   AM_RANGE(0x8c0000, 0x8dffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1250   AM_RANGE(0x8e0000, 0x8effff) AM_READ(metro_bankedrom_r)                     // Banked ROM
12111251   AM_RANGE(0x8f0000, 0x8f3fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1212   AM_RANGE(0x8f4000, 0x8f4fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1213   AM_RANGE(0x8f8000, 0x8f87ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1214   AM_RANGE(0x8f8800, 0x8f8813) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1215   AM_RANGE(0x8f8840, 0x8f884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1216   AM_RANGE(0x8f8860, 0x8f886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1217   AM_RANGE(0x8f8870, 0x8f887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
1218   AM_RANGE(0x8f8880, 0x8f8881) AM_WRITENOP                                 // ? increasing
1219   AM_RANGE(0x8f8890, 0x8f8891) AM_WRITENOP                                 // ? increasing
1220   AM_RANGE(0x8f88a2, 0x8f88a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1221   AM_RANGE(0x8f88a4, 0x8f88a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1252   AM_RANGE(0x8f4000, 0x8f4fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1253   AM_RANGE(0x8f8000, 0x8f87ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1254   AM_RANGE(0x8f8800, 0x8f8813) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1255   AM_RANGE(0x8f8840, 0x8f884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1256   AM_RANGE(0x8f8860, 0x8f886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1257   AM_RANGE(0x8f8870, 0x8f887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1258   AM_RANGE(0x8f8880, 0x8f8881) AM_WRITENOP                              // ? increasing
1259   AM_RANGE(0x8f8890, 0x8f8891) AM_WRITENOP                              // ? increasing
1260   AM_RANGE(0x8f88a2, 0x8f88a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1261   AM_RANGE(0x8f88a4, 0x8f88a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
12221262   AM_RANGE(0x8f88a8, 0x8f88a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1223   AM_RANGE(0x8f88aa, 0x8f88ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1224   AM_RANGE(0x8f88ac, 0x8f88ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1225   AM_RANGE(0xc00000, 0xc0ffff) AM_RAM                                     // RAM
1263   AM_RANGE(0x8f88aa, 0x8f88ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1264   AM_RANGE(0x8f88ac, 0x8f88ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1265   AM_RANGE(0xc00000, 0xc0ffff) AM_RAM                               // RAM
12261266ADDRESS_MAP_END
12271267
12281268
r7640r7641
12301270                                Mahjong Gakuensai
12311271***************************************************************************/
12321272
1233static int gakusai_oki_bank_lo, gakusai_oki_bank_hi;
1234
12351273static void gakusai_oki_bank_set(running_device *device)
12361274{
1237   int bank = (gakusai_oki_bank_lo & 7) + (gakusai_oki_bank_hi & 1) * 8;
1275   metro_state *state = (metro_state *)device->machine->driver_data;
1276   int bank = (state->gakusai_oki_bank_lo & 7) + (state->gakusai_oki_bank_hi & 1) * 8;
12381277   okim6295_set_bank_base(device, bank * 0x40000);
12391278}
12401279
12411280static WRITE16_DEVICE_HANDLER( gakusai_oki_bank_hi_w )
12421281{
1282   metro_state *state = (metro_state *)device->machine->driver_data;
1283
12431284   if (ACCESSING_BITS_0_7)
12441285   {
1245      gakusai_oki_bank_hi = data & 0xff;
1286      state->gakusai_oki_bank_hi = data & 0xff;
12461287      gakusai_oki_bank_set(device);
12471288   }
12481289}
12491290
12501291static WRITE16_DEVICE_HANDLER( gakusai_oki_bank_lo_w )
12511292{
1293   metro_state *state = (metro_state *)device->machine->driver_data;
1294
12521295   if (ACCESSING_BITS_0_7)
12531296   {
1254      gakusai_oki_bank_lo = data & 0xff;
1297      state->gakusai_oki_bank_lo = data & 0xff;
12551298      gakusai_oki_bank_set(device);
12561299   }
12571300}
12581301
1259static UINT16 *gakusai_input_sel;
12601302
12611303static READ16_HANDLER( gakusai_input_r )
12621304{
1263   UINT16 input_sel = (*gakusai_input_sel) ^ 0x3e;
1305   metro_state *state = (metro_state *)space->machine->driver_data;
1306   UINT16 input_sel = (*state->input_sel) ^ 0x3e;
12641307   // Bit 0 ??
12651308   if (input_sel & 0x0002)   return input_port_read(space->machine, "KEY0");
12661309   if (input_sel & 0x0004)   return input_port_read(space->machine, "KEY1");
r7640r7641
12801323   if (ACCESSING_BITS_0_7)
12811324   {
12821325      // latch the bit
1283      eeprom_write_bit(device, data & 0x01);
1326      eeprom_write_bit(device, BIT(data, 0));
12841327
12851328      // reset line asserted: reset.
1286      eeprom_set_cs_line(device, (data & 0x04) ? CLEAR_LINE : ASSERT_LINE );
1329      eeprom_set_cs_line(device, BIT(data, 2) ? CLEAR_LINE : ASSERT_LINE );
12871330
12881331      // clock line asserted: write latch or select next bit to read
1289      eeprom_set_clock_line(device, (data & 0x02) ? ASSERT_LINE : CLEAR_LINE );
1332      eeprom_set_clock_line(device, BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE );
12901333   }
12911334}
12921335
12931336static ADDRESS_MAP_START( gakusai_map, ADDRESS_SPACE_PROGRAM, 16 )
1294   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
1295   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                       // RAM
1296   AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1297   AM_RANGE(0x220000, 0x23ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1298   AM_RANGE(0x240000, 0x25ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1299   AM_RANGE(0x260000, 0x26ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1337   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
1338   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                 // RAM
1339   AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1340   AM_RANGE(0x220000, 0x23ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1341   AM_RANGE(0x240000, 0x25ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1342   AM_RANGE(0x260000, 0x26ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
13001343   AM_RANGE(0x270000, 0x273fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1301   AM_RANGE(0x274000, 0x274fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1302   AM_RANGE(0x278000, 0x2787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1303   AM_RANGE(0x27880e, 0x27880f) AM_RAM AM_BASE(&metro_screenctrl)                  // Screen Control
1304   AM_RANGE(0x278810, 0x27881f) AM_WRITEONLY AM_BASE(&metro_irq_levels)            // IRQ Levels
1305   AM_RANGE(0x278820, 0x27882f) AM_WRITEONLY AM_BASE(&metro_irq_vectors)            // IRQ Vectors
1306   AM_RANGE(0x278830, 0x278831) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1307   AM_RANGE(0x278832, 0x278833) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1344   AM_RANGE(0x274000, 0x274fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1345   AM_RANGE(0x278000, 0x2787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1346   AM_RANGE(0x27880e, 0x27880f) AM_RAM AM_BASE_MEMBER(metro_state, screenctrl)            // Screen Control
1347   AM_RANGE(0x278810, 0x27881f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_levels)         // IRQ Levels
1348   AM_RANGE(0x278820, 0x27882f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_vectors)         // IRQ Vectors
1349   AM_RANGE(0x278830, 0x278831) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
1350   AM_RANGE(0x278832, 0x278833) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
13081351   AM_RANGE(0x278880, 0x278881) AM_READ(gakusai_input_r)                        // Inputs
1309   AM_RANGE(0x278882, 0x278883) AM_READ_PORT("IN0")                           //
1352   AM_RANGE(0x278882, 0x278883) AM_READ_PORT("IN0")                        //
13101353   AM_RANGE(0x278836, 0x278837) AM_WRITE(watchdog_reset16_w)                     // Watchdog
1311   AM_RANGE(0x278840, 0x27884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1312   AM_RANGE(0x278860, 0x27886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1313   AM_RANGE(0x278850, 0x27885b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1314   AM_RANGE(0x278870, 0x278871) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1315   AM_RANGE(0x278888, 0x278889) AM_WRITEONLY AM_BASE(&gakusai_input_sel)            // Inputs
1316   AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1317   AM_RANGE(0x400000, 0x400001) AM_WRITENOP                                 // ? 5
1318   AM_RANGE(0x500000, 0x500001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)            // Sound
1354   AM_RANGE(0x278840, 0x27884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1355   AM_RANGE(0x278860, 0x27886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1356   AM_RANGE(0x278850, 0x27885b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1357   AM_RANGE(0x278870, 0x278871) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1358   AM_RANGE(0x278888, 0x278889) AM_WRITEONLY AM_BASE_MEMBER(metro_state, input_sel)         // Inputs
1359   AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1360   AM_RANGE(0x400000, 0x400001) AM_WRITENOP                              // ? 5
1361   AM_RANGE(0x500000, 0x500001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)               // Sound
13191362   AM_RANGE(0x600000, 0x600003) AM_DEVWRITE8("ymsnd", ym2413_w, 0x00ff)
1320   AM_RANGE(0x700000, 0x700001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)   // Sound
1321   AM_RANGE(0xc00000, 0xc00001) AM_DEVREADWRITE("eeprom", gakusai_eeprom_r,gakusai_eeprom_w)      // EEPROM
1363   AM_RANGE(0x700000, 0x700001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)         // Sound
1364   AM_RANGE(0xc00000, 0xc00001) AM_DEVREADWRITE("eeprom", gakusai_eeprom_r, gakusai_eeprom_w)   // EEPROM
13221365   AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("oki", gakusai_oki_bank_hi_w)
13231366ADDRESS_MAP_END
13241367
r7640r7641
13281371***************************************************************************/
13291372
13301373static ADDRESS_MAP_START( gakusai2_map, ADDRESS_SPACE_PROGRAM, 16 )
1331   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
1332   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                       // RAM
1333   AM_RANGE(0x600000, 0x61ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1334   AM_RANGE(0x620000, 0x63ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1335   AM_RANGE(0x640000, 0x65ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1336   AM_RANGE(0x660000, 0x66ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1374   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
1375   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                 // RAM
1376   AM_RANGE(0x600000, 0x61ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1377   AM_RANGE(0x620000, 0x63ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1378   AM_RANGE(0x640000, 0x65ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1379   AM_RANGE(0x660000, 0x66ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
13371380   AM_RANGE(0x670000, 0x673fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1338   AM_RANGE(0x674000, 0x674fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1339   AM_RANGE(0x675000, 0x675fff) AM_RAM                                       // Sprites?
1340   AM_RANGE(0x678000, 0x6787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1341   AM_RANGE(0x67880e, 0x67880f) AM_RAM AM_BASE(&metro_screenctrl)                  // Screen Control
1342   AM_RANGE(0x678810, 0x67881f) AM_WRITEONLY AM_BASE(&metro_irq_levels)            // IRQ Levels
1343   AM_RANGE(0x678820, 0x67882f) AM_WRITEONLY AM_BASE(&metro_irq_vectors)            // IRQ Vectors
1344   AM_RANGE(0x678830, 0x678831) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1345   AM_RANGE(0x678832, 0x678833) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1381   AM_RANGE(0x674000, 0x674fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1382   AM_RANGE(0x675000, 0x675fff) AM_RAM                                 // Sprites?
1383   AM_RANGE(0x678000, 0x6787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1384   AM_RANGE(0x67880e, 0x67880f) AM_RAM AM_BASE_MEMBER(metro_state, screenctrl)            // Screen Control
1385   AM_RANGE(0x678810, 0x67881f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_levels)         // IRQ Levels
1386   AM_RANGE(0x678820, 0x67882f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_vectors)         // IRQ Vectors
1387   AM_RANGE(0x678830, 0x678831) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
1388   AM_RANGE(0x678832, 0x678833) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
13461389   AM_RANGE(0x678836, 0x678837) AM_WRITE(watchdog_reset16_w)                     // Watchdog
1347   AM_RANGE(0x678840, 0x67884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1348   AM_RANGE(0x678860, 0x67886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1390   AM_RANGE(0x678840, 0x67884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1391   AM_RANGE(0x678860, 0x67886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
13491392   AM_RANGE(0x678880, 0x678881) AM_READ(gakusai_input_r)                        // Inputs
1350   AM_RANGE(0x678882, 0x678883) AM_READ_PORT("IN0")                           //
1351   AM_RANGE(0x678850, 0x67885b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1352   AM_RANGE(0x678870, 0x678871) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1353   AM_RANGE(0x678888, 0x678889) AM_WRITEONLY AM_BASE(&gakusai_input_sel)            // Inputs
1354   AM_RANGE(0x679700, 0x679713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1355   AM_RANGE(0x800000, 0x800001) AM_WRITENOP                                 // ? 5
1356   AM_RANGE(0x900000, 0x900001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)            // Sound bank
1393   AM_RANGE(0x678882, 0x678883) AM_READ_PORT("IN0")                        //
1394   AM_RANGE(0x678850, 0x67885b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1395   AM_RANGE(0x678870, 0x678871) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1396   AM_RANGE(0x678888, 0x678889) AM_WRITEONLY AM_BASE_MEMBER(metro_state, input_sel)         // Inputs
1397   AM_RANGE(0x679700, 0x679713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1398   AM_RANGE(0x800000, 0x800001) AM_WRITENOP                              // ? 5
1399   AM_RANGE(0x900000, 0x900001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)               // Sound bank
13571400   AM_RANGE(0xa00000, 0xa00001) AM_DEVWRITE("oki", gakusai_oki_bank_hi_w)
1358   AM_RANGE(0xb00000, 0xb00001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)   // Sound
1401   AM_RANGE(0xb00000, 0xb00001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)         // Sound
13591402   AM_RANGE(0xc00000, 0xc00003) AM_DEVWRITE8("ymsnd", ym2413_w, 0x00ff)
13601403   AM_RANGE(0xe00000, 0xe00001) AM_DEVREADWRITE("eeprom", gakusai_eeprom_r,gakusai_eeprom_w)      // EEPROM
13611404ADDRESS_MAP_END
r7640r7641
13791422   if (ACCESSING_BITS_0_7)
13801423   {
13811424      // latch the bit
1382      eeprom_write_bit(device, data & 0x01);
1425      eeprom_write_bit(device, BIT(data, 0));
13831426
13841427      // clock line asserted: write latch or select next bit to read
13851428      eeprom_set_clock_line(device, CLEAR_LINE);
r7640r7641
13921435   if (ACCESSING_BITS_0_7)
13931436   {
13941437      // reset line asserted: reset.
1395      eeprom_set_cs_line(device, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
1438      eeprom_set_cs_line(device, BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE);
13961439   }
13971440}
13981441
13991442static ADDRESS_MAP_START( dokyusp_map, ADDRESS_SPACE_PROGRAM, 16 )
1400   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1401   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                       // RAM
1402   AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1403   AM_RANGE(0x220000, 0x23ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1404   AM_RANGE(0x240000, 0x25ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1405   AM_RANGE(0x260000, 0x26ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1443   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1444   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                 // RAM
1445   AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1446   AM_RANGE(0x220000, 0x23ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1447   AM_RANGE(0x240000, 0x25ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1448   AM_RANGE(0x260000, 0x26ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
14061449   AM_RANGE(0x270000, 0x273fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1407   AM_RANGE(0x274000, 0x274fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1408   AM_RANGE(0x278000, 0x2787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1409   AM_RANGE(0x278810, 0x27881f) AM_WRITEONLY AM_BASE(&metro_irq_levels)            // IRQ Levels
1410   AM_RANGE(0x278820, 0x27882f) AM_WRITEONLY AM_BASE(&metro_irq_vectors)            // IRQ Vectors
1411   AM_RANGE(0x278830, 0x278831) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1412   AM_RANGE(0x278832, 0x278833) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1450   AM_RANGE(0x274000, 0x274fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1451   AM_RANGE(0x278000, 0x2787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1452   AM_RANGE(0x278810, 0x27881f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_levels)         // IRQ Levels
1453   AM_RANGE(0x278820, 0x27882f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_vectors)         // IRQ Vectors
1454   AM_RANGE(0x278830, 0x278831) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
1455   AM_RANGE(0x278832, 0x278833) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
14131456   AM_RANGE(0x278836, 0x278837) AM_WRITE(watchdog_reset16_w)                     // Watchdog
1414   AM_RANGE(0x278840, 0x27884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1415   AM_RANGE(0x278860, 0x27886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1416   AM_RANGE(0x278850, 0x27885b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1417   AM_RANGE(0x278870, 0x278871) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1457   AM_RANGE(0x278840, 0x27884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1458   AM_RANGE(0x278860, 0x27886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1459   AM_RANGE(0x278850, 0x27885b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1460   AM_RANGE(0x278870, 0x278871) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
14181461   AM_RANGE(0x278880, 0x278881) AM_READ(gakusai_input_r)                        // Inputs
1419   AM_RANGE(0x278882, 0x278883) AM_READ_PORT("IN0")                           //
1420   AM_RANGE(0x278888, 0x278889) AM_WRITEONLY AM_BASE(&gakusai_input_sel)            // Inputs
1421   AM_RANGE(0x27880e, 0x27880f) AM_RAM AM_BASE(&metro_screenctrl)                  // Screen Control
1422   AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1423   AM_RANGE(0x400000, 0x400001) AM_WRITENOP                                 // ? 5
1424   AM_RANGE(0x500000, 0x500001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)            // Sound
1462   AM_RANGE(0x278882, 0x278883) AM_READ_PORT("IN0")                        //
1463   AM_RANGE(0x278888, 0x278889) AM_WRITEONLY AM_BASE_MEMBER(metro_state, input_sel)         // Inputs
1464   AM_RANGE(0x27880e, 0x27880f) AM_RAM AM_BASE_MEMBER(metro_state, screenctrl)            // Screen Control
1465   AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1466   AM_RANGE(0x400000, 0x400001) AM_WRITENOP                              // ? 5
1467   AM_RANGE(0x500000, 0x500001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)               // Sound
14251468   AM_RANGE(0x600000, 0x600003) AM_DEVWRITE8("ymsnd", ym2413_w, 0x00ff)
1426   AM_RANGE(0x700000, 0x700001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)   // Sound
1427   AM_RANGE(0xc00000, 0xc00001) AM_DEVWRITE("eeprom", dokyusp_eeprom_reset_w)                  // EEPROM
1428   AM_RANGE(0xd00000, 0xd00001) AM_DEVREADWRITE("eeprom", dokyusp_eeprom_r,dokyusp_eeprom_bit_w)   // EEPROM
1469   AM_RANGE(0x700000, 0x700001) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)      // Sound
1470   AM_RANGE(0xc00000, 0xc00001) AM_DEVWRITE("eeprom", dokyusp_eeprom_reset_w)            // EEPROM
1471   AM_RANGE(0xd00000, 0xd00001) AM_DEVREADWRITE("eeprom", dokyusp_eeprom_r, dokyusp_eeprom_bit_w)   // EEPROM
14291472ADDRESS_MAP_END
14301473
14311474
r7640r7641
14341477***************************************************************************/
14351478
14361479static ADDRESS_MAP_START( dokyusei_map, ADDRESS_SPACE_PROGRAM, 16 )
1437   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1438   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                       // RAM
1439   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1440   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1441   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1442   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1443   AM_RANGE(0x460000, 0x46ffff) AM_WRITENOP                                 // DSW Selection
1480   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1481   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                 // RAM
1482   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1483   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1484   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1485   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
1486   AM_RANGE(0x460000, 0x46ffff) AM_WRITENOP                              // DSW Selection
14441487   AM_RANGE(0x470000, 0x473fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1445   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1446   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1447   AM_RANGE(0x47880e, 0x47880f) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1448   AM_RANGE(0x478810, 0x47881f) AM_WRITEONLY AM_BASE(&metro_irq_levels)            // IRQ Levels
1449   AM_RANGE(0x478820, 0x47882f) AM_WRITEONLY AM_BASE(&metro_irq_vectors)            // IRQ Vectors
1450   AM_RANGE(0x478830, 0x478831) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1451//  AM_RANGE(0x478832, 0x478833) AM_READ(metro_irq_cause_r)                             // IRQ Cause
1488   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1489   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1490   AM_RANGE(0x47880e, 0x47880f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1491   AM_RANGE(0x478810, 0x47881f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_levels)         // IRQ Levels
1492   AM_RANGE(0x478820, 0x47882f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_vectors)         // IRQ Vectors
1493   AM_RANGE(0x478830, 0x478831) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
1494//  AM_RANGE(0x478832, 0x478833) AM_READ(metro_irq_cause_r)                                      // IRQ Cause
14521495   AM_RANGE(0x478832, 0x478833) AM_WRITE(metro_irq_cause_w)                     // IRQ Acknowledge
1453   AM_RANGE(0x478836, 0x478837) AM_WRITENOP                                 // ? watchdog ?
1454   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1455   AM_RANGE(0x478850, 0x47885b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1456   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1457   AM_RANGE(0x478870, 0x478871) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1458   AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1459   AM_RANGE(0x478888, 0x478889) AM_WRITEONLY AM_BASE(&gakusai_input_sel)            // Inputs
1496   AM_RANGE(0x478836, 0x478837) AM_WRITENOP                              // ? watchdog ?
1497   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1498   AM_RANGE(0x478850, 0x47885b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1499   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1500   AM_RANGE(0x478870, 0x478871) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1501   AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1502   AM_RANGE(0x478888, 0x478889) AM_WRITEONLY AM_BASE_MEMBER(metro_state, input_sel)         // Inputs
14601503   AM_RANGE(0x478880, 0x478881) AM_READ(gakusai_input_r)                        // Inputs
1461   AM_RANGE(0x478882, 0x478883) AM_READ_PORT("IN0")                           //
1462   AM_RANGE(0x478884, 0x478885) AM_READ_PORT("DSW0")                           // 2 x DSW
1463   AM_RANGE(0x478886, 0x478887) AM_READ_PORT("DSW1")                           //
1464   AM_RANGE(0x800000, 0x800001) AM_DEVWRITE("oki", gakusai_oki_bank_hi_w)            // Samples Bank?
1465   AM_RANGE(0x900000, 0x900001) AM_WRITENOP                                 // ? 4
1466   AM_RANGE(0xa00000, 0xa00001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)            // Samples Bank
1504   AM_RANGE(0x478882, 0x478883) AM_READ_PORT("IN0")                        //
1505   AM_RANGE(0x478884, 0x478885) AM_READ_PORT("DSW0")                        // 2 x DSW
1506   AM_RANGE(0x478886, 0x478887) AM_READ_PORT("DSW1")                        //
1507   AM_RANGE(0x800000, 0x800001) AM_DEVWRITE("oki", gakusai_oki_bank_hi_w)               // Samples Bank?
1508   AM_RANGE(0x900000, 0x900001) AM_WRITENOP                              // ? 4
1509   AM_RANGE(0xa00000, 0xa00001) AM_DEVWRITE("oki", gakusai_oki_bank_lo_w)               // Samples Bank
14671510   AM_RANGE(0xc00000, 0xc00003) AM_DEVWRITE8("ymsnd", ym2413_w, 0x00ff)               //
1468   AM_RANGE(0xd00000, 0xd00001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)   // Sound
1511   AM_RANGE(0xd00000, 0xd00001) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)      // Sound
14691512ADDRESS_MAP_END
14701513
14711514
r7640r7641
14741517***************************************************************************/
14751518
14761519static ADDRESS_MAP_START( pangpoms_map, ADDRESS_SPACE_PROGRAM, 16 )
1477   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1478   AM_RANGE(0xc00000, 0xc0ffff) AM_RAM                                       // RAM
1479   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1480   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1481   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1482   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1520   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1521   AM_RANGE(0xc00000, 0xc0ffff) AM_RAM                                 // RAM
1522   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1523   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1524   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1525   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
14831526   AM_RANGE(0x470000, 0x473fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1484   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1485   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1486   AM_RANGE(0x478800, 0x478813) AM_RAM AM_BASE(&metro_videoregs)                  // Video Registers
1487   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1488   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1489   AM_RANGE(0x478870, 0x47887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1490   AM_RANGE(0x478880, 0x478881) AM_WRITENOP                                 // ? increasing
1491   AM_RANGE(0x478890, 0x478891) AM_WRITENOP                                 // ? increasing
1492   AM_RANGE(0x4788a2, 0x4788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1493   AM_RANGE(0x4788a4, 0x4788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1527   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1528   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1529   AM_RANGE(0x478800, 0x478813) AM_RAM AM_BASE_MEMBER(metro_state, videoregs)            // Video Registers
1530   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1531   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1532   AM_RANGE(0x478870, 0x47887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1533   AM_RANGE(0x478880, 0x478881) AM_WRITENOP                              // ? increasing
1534   AM_RANGE(0x478890, 0x478891) AM_WRITENOP                              // ? increasing
1535   AM_RANGE(0x4788a2, 0x4788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1536   AM_RANGE(0x4788a4, 0x4788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
14941537   AM_RANGE(0x4788a8, 0x4788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1495   AM_RANGE(0x4788aa, 0x4788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1496   AM_RANGE(0x4788ac, 0x4788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1497   AM_RANGE(0x800000, 0x800001) AM_READWRITE(metro_soundstatus_r,metro_soundstatus_w)   // From / To Sound CPU
1498   AM_RANGE(0x800002, 0x800003) AM_READNOP   AM_WRITE(metro_coin_lockout_1word_w)      // Coin Lockout
1499   AM_RANGE(0x800004, 0x800005) AM_READ_PORT("IN0")                           // Inputs
1500   AM_RANGE(0x800006, 0x800007) AM_READ_PORT("IN1")                           //
1501   AM_RANGE(0x800008, 0x800009) AM_READ_PORT("IN2")                           //
1502   AM_RANGE(0x80000a, 0x80000b) AM_READ_PORT("DSW0")                           //
1503   AM_RANGE(0x80000c, 0x80000d) AM_READ_PORT("DSW1")                           //
1504   AM_RANGE(0x80000e, 0x80000f) AM_READ_PORT("IN3")                           //
1538   AM_RANGE(0x4788aa, 0x4788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1539   AM_RANGE(0x4788ac, 0x4788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1540   AM_RANGE(0x800000, 0x800001) AM_READWRITE(metro_soundstatus_r,metro_soundstatus_w)         // From / To Sound CPU
1541   AM_RANGE(0x800002, 0x800003) AM_READNOP   AM_WRITE(metro_coin_lockout_1word_w)         // Coin Lockout
1542   AM_RANGE(0x800004, 0x800005) AM_READ_PORT("IN0")                        // Inputs
1543   AM_RANGE(0x800006, 0x800007) AM_READ_PORT("IN1")                        //
1544   AM_RANGE(0x800008, 0x800009) AM_READ_PORT("IN2")                        //
1545   AM_RANGE(0x80000a, 0x80000b) AM_READ_PORT("DSW0")                        //
1546   AM_RANGE(0x80000c, 0x80000d) AM_READ_PORT("DSW1")                        //
1547   AM_RANGE(0x80000e, 0x80000f) AM_READ_PORT("IN3")                        //
15051548ADDRESS_MAP_END
15061549
15071550
r7640r7641
15101553***************************************************************************/
15111554
15121555static ADDRESS_MAP_START( poitto_map, ADDRESS_SPACE_PROGRAM, 16 )
1513   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1514   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                       // RAM
1515   AM_RANGE(0xc00000, 0xc1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1516   AM_RANGE(0xc20000, 0xc3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1517   AM_RANGE(0xc40000, 0xc5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1518   AM_RANGE(0xc60000, 0xc6ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1556   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1557   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                 // RAM
1558   AM_RANGE(0xc00000, 0xc1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1559   AM_RANGE(0xc20000, 0xc3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1560   AM_RANGE(0xc40000, 0xc5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1561   AM_RANGE(0xc60000, 0xc6ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
15191562   AM_RANGE(0xc70000, 0xc73fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1520   AM_RANGE(0xc74000, 0xc74fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1521   AM_RANGE(0xc78000, 0xc787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1522   AM_RANGE(0xc78800, 0xc78813) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1523   AM_RANGE(0xc78840, 0xc7884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1524   AM_RANGE(0xc78860, 0xc7886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1525   AM_RANGE(0xc78870, 0xc7887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1526   AM_RANGE(0xc78880, 0xc78881) AM_WRITENOP                                 // ? increasing
1527   AM_RANGE(0xc78890, 0xc78891) AM_WRITENOP                                 // ? increasing
1528   AM_RANGE(0xc788a2, 0xc788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1529   AM_RANGE(0xc788a4, 0xc788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1563   AM_RANGE(0xc74000, 0xc74fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1564   AM_RANGE(0xc78000, 0xc787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1565   AM_RANGE(0xc78800, 0xc78813) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1566   AM_RANGE(0xc78840, 0xc7884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1567   AM_RANGE(0xc78860, 0xc7886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1568   AM_RANGE(0xc78870, 0xc7887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1569   AM_RANGE(0xc78880, 0xc78881) AM_WRITENOP                              // ? increasing
1570   AM_RANGE(0xc78890, 0xc78891) AM_WRITENOP                              // ? increasing
1571   AM_RANGE(0xc788a2, 0xc788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1572   AM_RANGE(0xc788a4, 0xc788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
15301573   AM_RANGE(0xc788a8, 0xc788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1531   AM_RANGE(0xc788aa, 0xc788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1532   AM_RANGE(0xc788ac, 0xc788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1533   AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)      // To Sound CPU
1574   AM_RANGE(0xc788aa, 0xc788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1575   AM_RANGE(0xc788ac, 0xc788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1576   AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)         // To Sound CPU
15341577   AM_RANGE(0x800002, 0x800003) AM_READ_PORT("IN1")
15351578   AM_RANGE(0x800004, 0x800005) AM_READ_PORT("DSW0")
15361579   AM_RANGE(0x800006, 0x800007) AM_READ_PORT("IN2")
r7640r7641
15431586***************************************************************************/
15441587
15451588static ADDRESS_MAP_START( skyalert_map, ADDRESS_SPACE_PROGRAM, 16 )
1546   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                       // ROM
1547   AM_RANGE(0xc00000, 0xc0ffff) AM_RAM                                       // RAM
1548   AM_RANGE(0x800000, 0x81ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1549   AM_RANGE(0x820000, 0x83ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1550   AM_RANGE(0x840000, 0x85ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1551   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1589   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                 // ROM
1590   AM_RANGE(0xc00000, 0xc0ffff) AM_RAM                                 // RAM
1591   AM_RANGE(0x800000, 0x81ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1592   AM_RANGE(0x820000, 0x83ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1593   AM_RANGE(0x840000, 0x85ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1594   AM_RANGE(0x860000, 0x86ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
15521595   AM_RANGE(0x870000, 0x873fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1553   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1554   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1555   AM_RANGE(0x878800, 0x878813) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1556   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1557   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window   )      // Tilemap Window
1558   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
1559   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                                 // ? increasing
1560   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                                 // ? increasing
1561   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1562   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1596   AM_RANGE(0x874000, 0x874fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1597   AM_RANGE(0x878000, 0x8787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1598   AM_RANGE(0x878800, 0x878813) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1599   AM_RANGE(0x878840, 0x87884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1600   AM_RANGE(0x878860, 0x87886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1601   AM_RANGE(0x878870, 0x87887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1602   AM_RANGE(0x878880, 0x878881) AM_WRITENOP                              // ? increasing
1603   AM_RANGE(0x878890, 0x878891) AM_WRITENOP                              // ? increasing
1604   AM_RANGE(0x8788a2, 0x8788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1605   AM_RANGE(0x8788a4, 0x8788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
15631606   AM_RANGE(0x8788a8, 0x8788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1564   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1565   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1566   AM_RANGE(0x400000, 0x400001) AM_READWRITE(metro_soundstatus_r,metro_soundstatus_w)   // From / To Sound CPU
1567   AM_RANGE(0x400002, 0x400003) AM_READNOP   AM_WRITE(metro_coin_lockout_1word_w)      // Coin Lockout
1568   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("IN0")                           // Inputs
1569   AM_RANGE(0x400006, 0x400007) AM_READ_PORT("IN1")                           //
1570   AM_RANGE(0x400008, 0x400009) AM_READ_PORT("IN2")                           //
1571   AM_RANGE(0x40000a, 0x40000b) AM_READ_PORT("DSW0")                           //
1572   AM_RANGE(0x40000c, 0x40000d) AM_READ_PORT("DSW1")                           //
1573   AM_RANGE(0x40000e, 0x40000f) AM_READ_PORT("IN3")                           //
1607   AM_RANGE(0x8788aa, 0x8788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1608   AM_RANGE(0x8788ac, 0x8788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1609   AM_RANGE(0x400000, 0x400001) AM_READWRITE(metro_soundstatus_r,metro_soundstatus_w)         // From / To Sound CPU
1610   AM_RANGE(0x400002, 0x400003) AM_READNOP   AM_WRITE(metro_coin_lockout_1word_w)         // Coin Lockout
1611   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("IN0")                        // Inputs
1612   AM_RANGE(0x400006, 0x400007) AM_READ_PORT("IN1")                        //
1613   AM_RANGE(0x400008, 0x400009) AM_READ_PORT("IN2")                        //
1614   AM_RANGE(0x40000a, 0x40000b) AM_READ_PORT("DSW0")                        //
1615   AM_RANGE(0x40000c, 0x40000d) AM_READ_PORT("DSW1")                        //
1616   AM_RANGE(0x40000e, 0x40000f) AM_READ_PORT("IN3")                        //
15741617ADDRESS_MAP_END
15751618
15761619
r7640r7641
15791622***************************************************************************/
15801623
15811624static ADDRESS_MAP_START( pururun_map, ADDRESS_SPACE_PROGRAM, 16 )
1582   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
1583   AM_RANGE(0x800000, 0x80ffff) AM_RAM                                       // RAM
1584   AM_RANGE(0xc00000, 0xc1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1585   AM_RANGE(0xc20000, 0xc3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1586   AM_RANGE(0xc40000, 0xc5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1587   AM_RANGE(0xc60000, 0xc6ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1625   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
1626   AM_RANGE(0x800000, 0x80ffff) AM_RAM                                 // RAM
1627   AM_RANGE(0xc00000, 0xc1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1628   AM_RANGE(0xc20000, 0xc3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1629   AM_RANGE(0xc40000, 0xc5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1630   AM_RANGE(0xc60000, 0xc6ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
15881631   AM_RANGE(0xc70000, 0xc73fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1589   AM_RANGE(0xc74000, 0xc74fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1590   AM_RANGE(0xc78000, 0xc787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1591   AM_RANGE(0xc78840, 0xc7884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1592   AM_RANGE(0xc78860, 0xc7886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1593   AM_RANGE(0xc78870, 0xc7887b) AM_WRITEONLY AM_BASE(&metro_scroll)            // Scroll Regs
1594   AM_RANGE(0xc78880, 0xc78881) AM_WRITENOP                                 // ? increasing
1595   AM_RANGE(0xc78890, 0xc78891) AM_WRITENOP                                 // ? increasing
1596   AM_RANGE(0xc788a2, 0xc788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1597   AM_RANGE(0xc788a4, 0xc788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1632   AM_RANGE(0xc74000, 0xc74fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1633   AM_RANGE(0xc78000, 0xc787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1634   AM_RANGE(0xc78840, 0xc7884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1635   AM_RANGE(0xc78860, 0xc7886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1636   AM_RANGE(0xc78870, 0xc7887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1637   AM_RANGE(0xc78880, 0xc78881) AM_WRITENOP                              // ? increasing
1638   AM_RANGE(0xc78890, 0xc78891) AM_WRITENOP                              // ? increasing
1639   AM_RANGE(0xc788a2, 0xc788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1640   AM_RANGE(0xc788a4, 0xc788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
15981641   AM_RANGE(0xc788a8, 0xc788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1599   AM_RANGE(0xc788aa, 0xc788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1600   AM_RANGE(0xc788ac, 0xc788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1601   AM_RANGE(0xc79700, 0xc79713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1602   AM_RANGE(0x400000, 0x400001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)      // To Sound CPU
1642   AM_RANGE(0xc788aa, 0xc788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1643   AM_RANGE(0xc788ac, 0xc788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1644   AM_RANGE(0xc79700, 0xc79713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1645   AM_RANGE(0x400000, 0x400001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)         // To Sound CPU
16031646   AM_RANGE(0x400002, 0x400003) AM_READ_PORT("IN1")
16041647   AM_RANGE(0x400004, 0x400005) AM_READ_PORT("DSW0")
16051648   AM_RANGE(0x400006, 0x400007) AM_READ_PORT("IN2")
r7640r7641
16121655***************************************************************************/
16131656
16141657static ADDRESS_MAP_START( toride2g_map, ADDRESS_SPACE_PROGRAM, 16 )
1615   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
1616   AM_RANGE(0x400000, 0x4cffff) AM_RAM                                       // RAM (4xc000-4xffff mirrored?)
1617   AM_RANGE(0xc00000, 0xc1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1618   AM_RANGE(0xc20000, 0xc3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1619   AM_RANGE(0xc40000, 0xc5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1620   AM_RANGE(0xc60000, 0xc6ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1658   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
1659   AM_RANGE(0x400000, 0x4cffff) AM_RAM                                 // RAM (4xc000-4xffff mirrored?)
1660   AM_RANGE(0xc00000, 0xc1ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1661   AM_RANGE(0xc20000, 0xc3ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1662   AM_RANGE(0xc40000, 0xc5ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1663   AM_RANGE(0xc60000, 0xc6ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
16211664   AM_RANGE(0xc70000, 0xc73fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1622   AM_RANGE(0xc74000, 0xc74fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1623   AM_RANGE(0xc78000, 0xc787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1624   AM_RANGE(0xc78840, 0xc7884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1625   AM_RANGE(0xc78860, 0xc7886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1626   AM_RANGE(0xc78870, 0xc7887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1627   AM_RANGE(0xc78880, 0xc78881) AM_WRITENOP                                 // ? increasing
1628   AM_RANGE(0xc78890, 0xc78891) AM_WRITENOP                                 // ? increasing
1629   AM_RANGE(0xc788a2, 0xc788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1630   AM_RANGE(0xc788a4, 0xc788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1665   AM_RANGE(0xc74000, 0xc74fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1666   AM_RANGE(0xc78000, 0xc787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1667   AM_RANGE(0xc78840, 0xc7884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1668   AM_RANGE(0xc78860, 0xc7886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1669   AM_RANGE(0xc78870, 0xc7887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1670   AM_RANGE(0xc78880, 0xc78881) AM_WRITENOP                              // ? increasing
1671   AM_RANGE(0xc78890, 0xc78891) AM_WRITENOP                              // ? increasing
1672   AM_RANGE(0xc788a2, 0xc788a3) AM_READWRITE(metro_irq_cause_r, metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1673   AM_RANGE(0xc788a4, 0xc788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
16311674   AM_RANGE(0xc788a8, 0xc788a9) AM_WRITE(metro_soundlatch_w)                     // To Sound CPU
1632   AM_RANGE(0xc788aa, 0xc788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1633   AM_RANGE(0xc788ac, 0xc788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1634   AM_RANGE(0xc79700, 0xc79713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1675   AM_RANGE(0xc788aa, 0xc788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1676   AM_RANGE(0xc788ac, 0xc788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1677   AM_RANGE(0xc79700, 0xc79713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
16351678
1636   AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)      // To Sound CPU
1679   AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN0") AM_WRITE(metro_soundstatus_w)         // To Sound CPU
16371680   AM_RANGE(0x800002, 0x800003) AM_READ_PORT("IN1")
16381681   AM_RANGE(0x800004, 0x800005) AM_READ_PORT("DSW0")
16391682   AM_RANGE(0x800006, 0x800007) AM_READ_PORT("IN2")
r7640r7641
16481691
16491692static WRITE16_HANDLER( blzntrnd_sound_w )
16501693{
1694   metro_state *state = (metro_state *)space->machine->driver_data;
1695
16511696   soundlatch_w(space, offset, data >> 8);
1652   cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
1697   cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE);
16531698}
16541699
16551700static WRITE8_HANDLER( blzntrnd_sh_bankswitch_w )
r7640r7641
16631708
16641709static void blzntrnd_irqhandler(running_device *device, int irq)
16651710{
1666   cputag_set_input_line(device->machine, "audiocpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
1711   metro_state *state = (metro_state *)device->machine->driver_data;
1712   cpu_set_input_line(state->audiocpu, 0, irq ? ASSERT_LINE : CLEAR_LINE);
16671713}
16681714
16691715static const ym2610_interface blzntrnd_ym2610_interface =
r7640r7641
16851731ADDRESS_MAP_END
16861732
16871733static ADDRESS_MAP_START( blzntrnd_map, ADDRESS_SPACE_PROGRAM, 16 )
1688   AM_RANGE(0x000000, 0x1fffff) AM_ROM                                       // ROM
1689   AM_RANGE(0xff0000, 0xffffff) AM_RAM                                     // RAM
1734   AM_RANGE(0x000000, 0x1fffff) AM_ROM                                 // ROM
1735   AM_RANGE(0xff0000, 0xffffff) AM_RAM                               // RAM
16901736//  AM_RANGE(0x300000, 0x300001) AM_READNOP                                             // Sound
1691   AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0)   // Layer 0
1692   AM_RANGE(0x220000, 0x23ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1)   // Layer 1
1693   AM_RANGE(0x240000, 0x25ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2)   // Layer 2
1694   AM_RANGE(0x260000, 0x26ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1695   AM_RANGE(0x260000, 0x26ffff) AM_WRITENOP                                 // ??????
1737   AM_RANGE(0x200000, 0x21ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1738   AM_RANGE(0x220000, 0x23ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1739   AM_RANGE(0x240000, 0x25ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1740   AM_RANGE(0x260000, 0x26ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
1741   AM_RANGE(0x260000, 0x26ffff) AM_WRITENOP                              // ??????
16961742   AM_RANGE(0x270000, 0x273fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1697   AM_RANGE(0x274000, 0x274fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1698   AM_RANGE(0x278000, 0x2787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1699   AM_RANGE(0x278860, 0x27886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1700   AM_RANGE(0x278870, 0x27887b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll
1701   AM_RANGE(0x278890, 0x278891) AM_WRITENOP                                 // ? increasing
1702   AM_RANGE(0x2788a2, 0x2788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1703   AM_RANGE(0x2788a4, 0x2788a5) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1704   AM_RANGE(0x2788aa, 0x2788ab) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1705   AM_RANGE(0x2788ac, 0x2788ad) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1706   AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1743   AM_RANGE(0x274000, 0x274fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1744   AM_RANGE(0x278000, 0x2787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1745   AM_RANGE(0x278860, 0x27886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1746   AM_RANGE(0x278870, 0x27887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1747   AM_RANGE(0x278890, 0x278891) AM_WRITENOP                              // ? increasing
1748   AM_RANGE(0x2788a2, 0x2788a3) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
1749   AM_RANGE(0x2788a4, 0x2788a5) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
1750   AM_RANGE(0x2788aa, 0x2788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1751   AM_RANGE(0x2788ac, 0x2788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1752   AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
17071753
1708   AM_RANGE(0x400000, 0x43ffff) AM_RAM_WRITE(metro_K053936_w) AM_BASE(&metro_K053936_ram)   // 053936
1709   AM_RANGE(0x500000, 0x500fff) AM_DEVWRITE("k053936", k053936_linectrl_w)            // 053936 line control
1710   AM_RANGE(0x600000, 0x60001f) AM_DEVWRITE("k053936", k053936_ctrl_w)            // 053936 control
1754   AM_RANGE(0x400000, 0x43ffff) AM_RAM_WRITE(metro_k053936_w) AM_BASE_MEMBER(metro_state, k053936_ram)   // 053936
1755   AM_RANGE(0x500000, 0x500fff) AM_DEVWRITE("k053936", k053936_linectrl_w)               // 053936 line control
1756   AM_RANGE(0x600000, 0x60001f) AM_DEVWRITE("k053936", k053936_ctrl_w)               // 053936 control
17111757
17121758   AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("DSW0") AM_WRITENOP                  // Inputs
1713   AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("DSW1") AM_WRITE(blzntrnd_sound_w)      //
1714   AM_RANGE(0xe00004, 0xe00005) AM_READ_PORT("IN0")                           //
1715   AM_RANGE(0xe00006, 0xe00007) AM_READ_PORT("IN1")                           //
1716   AM_RANGE(0xe00008, 0xe00009) AM_READ_PORT("IN2")                           //
1759   AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("DSW1") AM_WRITE(blzntrnd_sound_w)            //
1760   AM_RANGE(0xe00004, 0xe00005) AM_READ_PORT("IN0")                        //
1761   AM_RANGE(0xe00006, 0xe00007) AM_READ_PORT("IN1")                        //
1762   AM_RANGE(0xe00008, 0xe00009) AM_READ_PORT("IN2")                        //
17171763ADDRESS_MAP_END
17181764
17191765
r7640r7641
17231769
17241770static WRITE16_DEVICE_HANDLER( mouja_sound_rombank_w )
17251771{
1772   metro_state *state = (metro_state *)device->machine->driver_data;
1773
17261774   if (ACCESSING_BITS_0_7)
1727      okim6295_set_bank_base(devtag_get_device(device->machine, "oki"), ((data >> 3) & 0x07) * 0x40000);
1775      okim6295_set_bank_base(state->oki, ((data >> 3) & 0x07) * 0x40000);
17281776}
17291777
17301778static ADDRESS_MAP_START( mouja_map, ADDRESS_SPACE_PROGRAM, 16 )
1731   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                       // ROM
1732   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                       // RAM
1733   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE(&metro_vram_0   )   // Layer 0
1734   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE(&metro_vram_1   )   // Layer 1
1735   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE(&metro_vram_2   )   // Layer 2
1779   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                 // ROM
1780   AM_RANGE(0xf00000, 0xf0ffff) AM_RAM                                 // RAM
1781   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1782   AM_RANGE(0x420000, 0x43ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1783   AM_RANGE(0x440000, 0x45ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
17361784   AM_RANGE(0x470000, 0x473fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
1737   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)   // Sprites
1738   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size)   // Tiles Set
1739   AM_RANGE(0x47880e, 0x47880f) AM_WRITEONLY AM_BASE(&metro_screenctrl)            // Screen Control
1740   AM_RANGE(0x478810, 0x47881f) AM_WRITEONLY AM_BASE(&metro_irq_levels)            // IRQ Levels
1741   AM_RANGE(0x478820, 0x47882f) AM_WRITEONLY AM_BASE(&metro_irq_vectors)            // IRQ Vectors
1742   AM_RANGE(0x478830, 0x478831) AM_WRITEONLY AM_BASE(&metro_irq_enable)            // IRQ Enable
1743   AM_RANGE(0x478832, 0x478833) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)      // IRQ Cause / IRQ Acknowledge
1785   AM_RANGE(0x474000, 0x474fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)   // Sprites
1786   AM_RANGE(0x478000, 0x4787ff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1787   AM_RANGE(0x47880e, 0x47880f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
1788   AM_RANGE(0x478810, 0x47881f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_levels)         // IRQ Levels
1789   AM_RANGE(0x478820, 0x47882f) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_vectors)         // IRQ Vectors
1790   AM_RANGE(0x478830, 0x478831) AM_WRITEONLY AM_BASE_MEMBER(metro_state, irq_enable)         // IRQ Enable
1791   AM_RANGE(0x478832, 0x478833) AM_READWRITE(metro_irq_cause_r,metro_irq_cause_w)         // IRQ Cause / IRQ Acknowledge
17441792   AM_RANGE(0x478834, 0x478835) AM_WRITE(mouja_irq_timer_ctrl_w)                  // IRQ set timer count
17451793   AM_RANGE(0x478836, 0x478837) AM_WRITE(watchdog_reset16_w)                     // Watchdog
1746   AM_RANGE(0x478850, 0x47885b) AM_WRITEONLY AM_BASE(&metro_scroll)               // Scroll Regs
1747   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE(&metro_window)      // Tilemap Window
1748   AM_RANGE(0x478880, 0x478881) AM_READ_PORT("IN0")                           // Inputs
1749   AM_RANGE(0x478882, 0x478883) AM_READ_PORT("IN1")                           //
1750   AM_RANGE(0x478884, 0x478885) AM_READ_PORT("DSW0")                           //
1751   AM_RANGE(0x478886, 0x478887) AM_READ_PORT("IN2")                           //
1752   AM_RANGE(0x478888, 0x478889) AM_WRITENOP                                 // ??
1753   AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE(&metro_videoregs)               // Video Registers
1794   AM_RANGE(0x478850, 0x47885b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll Regs
1795   AM_RANGE(0x478860, 0x47886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1796   AM_RANGE(0x478880, 0x478881) AM_READ_PORT("IN0")                        // Inputs
1797   AM_RANGE(0x478882, 0x478883) AM_READ_PORT("IN1")                        //
1798   AM_RANGE(0x478884, 0x478885) AM_READ_PORT("DSW0")                        //
1799   AM_RANGE(0x478886, 0x478887) AM_READ_PORT("IN2")                        //
1800   AM_RANGE(0x478888, 0x478889) AM_WRITENOP                              // ??
1801   AM_RANGE(0x479700, 0x479713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
17541802   AM_RANGE(0x800000, 0x800001) AM_DEVWRITE("oki", mouja_sound_rombank_w)
17551803   AM_RANGE(0xc00000, 0xc00003) AM_DEVWRITE8("ymsnd", ym2413_w, 0x00ff)
17561804   AM_RANGE(0xd00000, 0xd00001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0xffff)
17571805#if 0
1758   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                        // Banked ROM
1759   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE(&metro_blitter_regs)   // Tiles Blitter
1760   AM_RANGE(0x47883a, 0x47883b) AM_WRITEONLY AM_BASE(&metro_rombank)               // Rom Bank
1806   AM_RANGE(0x460000, 0x46ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
1807   AM_RANGE(0x478840, 0x47884d) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1808   AM_RANGE(0x47883a, 0x47883b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
17611809   AM_RANGE(0x800002, 0x800009) AM_WRITE(metro_coin_lockout_4words_w)               // Coin Lockout
17621810#endif
17631811ADDRESS_MAP_END
r7640r7641
17691817
17701818static WRITE16_HANDLER( puzzlet_irq_enable_w )
17711819{
1820   metro_state *state = (metro_state *)space->machine->driver_data;
1821
17721822   if (ACCESSING_BITS_0_7)
1773      *metro_irq_enable = data^0xffff;
1823      *state->irq_enable = data ^ 0xffff;
17741824}
17751825
1826 /* FIXME: algorythm not yet understood. */
1827static WRITE16_HANDLER( vram_0_clr_w )
1828{
1829   static int i;
1830   metro_state *state = (metro_state *)space->machine->driver_data;
1831
1832//  printf("0 %04x %04x\n",offset,data);
1833   for(i=0;i<0x20/2;i++)
1834      state->vram_0[(offset*0x10+i)/2] = 0xffff;
1835}
1836
1837static WRITE16_HANDLER( vram_1_clr_w )
1838{
1839   static int i;
1840   metro_state *state = (metro_state *)space->machine->driver_data;
1841
1842//  printf("0 %04x %04x\n",offset,data);
1843   for(i=0;i<0x20/2;i++)
1844      state->vram_1[(offset*0x10+i)/2] = 0xffff;
1845}
1846
1847static WRITE16_HANDLER( vram_2_clr_w )
1848{
1849   static int i;
1850   metro_state *state = (metro_state *)space->machine->driver_data;
1851
1852//  printf("0 %04x %04x\n",offset,data);
1853   for(i=0;i<0x20/2;i++)
1854      state->vram_2[(offset*0x10+i)/2] = 0xffff;
1855}
1856
1857
17761858// H8/3007 CPU
17771859static ADDRESS_MAP_START( puzzlet_map, ADDRESS_SPACE_PROGRAM, 16 )
1778   AM_RANGE( 0x000000, 0x1fffff ) AM_ROM
1779   AM_RANGE( 0x430000, 0x433fff ) AM_RAM
1780   AM_RANGE( 0x470000, 0x47dfff ) AM_RAM
1860   AM_RANGE(0x000000, 0x1fffff) AM_ROM
1861   AM_RANGE(0x430000, 0x433fff) AM_RAM
1862   AM_RANGE(0x470000, 0x47dfff) AM_RAM
17811863
1782   AM_RANGE( 0x500000, 0x500001 ) AM_DEVREADWRITE8( "oki", okim6295_r, okim6295_w, 0xff00 )
1783   AM_RANGE( 0x580000, 0x580003 ) AM_DEVWRITE8( "ymsnd", ym2413_w, 0xff00 )
1864   AM_RANGE(0x500000, 0x500001) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0xff00)
1865   AM_RANGE(0x580000, 0x580003) AM_DEVWRITE8("ymsnd", ym2413_w, 0xff00)
17841866
1785   AM_RANGE( 0x700000, 0x71ffff ) AM_RAM_WRITE( metro_vram_0_w ) AM_BASE( &metro_vram_0 )   // Layer 0
1786   AM_RANGE( 0x720000, 0x73ffff ) AM_RAM_WRITE( metro_vram_1_w ) AM_BASE( &metro_vram_1 )   // Layer 1
1787   AM_RANGE( 0x740000, 0x75ffff ) AM_RAM_WRITE( metro_vram_2_w ) AM_BASE( &metro_vram_2 )   // Layer 2
1788   AM_RANGE( 0x774000, 0x774fff ) AM_RAM   AM_BASE_SIZE_GENERIC( spriteram )
1867   AM_RANGE(0x700000, 0x71ffff) AM_RAM_WRITE(metro_vram_0_w) AM_BASE_MEMBER(metro_state, vram_0)   // Layer 0
1868   AM_RANGE(0x720000, 0x73ffff) AM_RAM_WRITE(metro_vram_1_w) AM_BASE_MEMBER(metro_state, vram_1)   // Layer 1
1869   AM_RANGE(0x740000, 0x75ffff) AM_RAM_WRITE(metro_vram_2_w) AM_BASE_MEMBER(metro_state, vram_2)   // Layer 2
1870   AM_RANGE(0x774000, 0x774fff) AM_RAM   AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)
17891871
1790   AM_RANGE( 0x760000, 0x76ffff ) AM_READ( metro_bankedrom_r )   // Banked ROM
1872   AM_RANGE(0x760000, 0x76ffff) AM_READ(metro_bankedrom_r)                     // Banked ROM
17911873
1792//  AM_RANGE( 0x772000, 0x773fff ) AM_RAM
1793   AM_RANGE( 0x770000, 0x773fff ) AM_RAM_WRITE( paletteram16_GGGGGRRRRRBBBBBx_word_w   ) AM_BASE_GENERIC( paletteram )   // Palette
1874//  AM_RANGE(0x772000, 0x773fff) AM_RAM
1875   AM_RANGE(0x770000, 0x773fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
17941876
1795   AM_RANGE( 0x775000, 0x777fff ) AM_RAM
1877   AM_RANGE(0x775000, 0x775fff) AM_RAM_WRITE(vram_0_clr_w)
1878   AM_RANGE(0x776000, 0x776fff) AM_RAM_WRITE(vram_1_clr_w)
1879   AM_RANGE(0x777000, 0x777fff) AM_RAM_WRITE(vram_2_clr_w)
17961880
1797   AM_RANGE( 0x778000, 0x7787ff ) AM_RAM   AM_BASE(&metro_tiletable) AM_SIZE(&metro_tiletable_size      )   // Tiles Set
1798   AM_RANGE( 0x778800, 0x778813 ) AM_WRITEONLY      AM_BASE( &metro_videoregs )   // Video Registers
1799   AM_RANGE( 0x778840, 0x77884f ) AM_WRITE( metro_blitter_w )   AM_BASE( &metro_blitter_regs )   // Tiles Blitter
1800   AM_RANGE( 0x778860, 0x77886b ) AM_WRITE( metro_window_w )   AM_BASE( &metro_window )   // Tilemap Window
1801   AM_RANGE( 0x778870, 0x77887b ) AM_WRITEONLY      AM_BASE( &metro_scroll )   // Scroll
1802   AM_RANGE( 0x778890, 0x778891 ) AM_WRITENOP   // ? increasing
1803   AM_RANGE( 0x7788a2, 0x7788a3 ) AM_WRITE( metro_irq_cause_w )   // IRQ Cause
1804   AM_RANGE( 0x7788a4, 0x7788a5 ) AM_WRITE( puzzlet_irq_enable_w ) AM_BASE( &metro_irq_enable )   // IRQ Enable
1881   AM_RANGE(0x778000, 0x7787ff) AM_RAM   AM_BASE_SIZE_MEMBER(metro_state, tiletable, tiletable_size)   // Tiles Set
1882   AM_RANGE(0x778800, 0x778813) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)         // Video Registers
1883   AM_RANGE(0x778840, 0x77884f) AM_WRITE(metro_blitter_w) AM_BASE_MEMBER(metro_state, blitter_regs)   // Tiles Blitter
1884   AM_RANGE(0x778860, 0x77886b) AM_WRITE(metro_window_w) AM_BASE_MEMBER(metro_state, window)      // Tilemap Window
1885   AM_RANGE(0x778870, 0x77887b) AM_WRITEONLY AM_BASE_MEMBER(metro_state, scroll)            // Scroll
1886   AM_RANGE(0x778890, 0x778891) AM_WRITENOP                              // ? increasing
1887   AM_RANGE(0x7788a2, 0x7788a3) AM_WRITE(metro_irq_cause_w)                     // IRQ Cause
1888   AM_RANGE(0x7788a4, 0x7788a5) AM_WRITE(puzzlet_irq_enable_w) AM_BASE_MEMBER(metro_state, irq_enable)   // IRQ Enable
18051889
1806   AM_RANGE( 0x7788aa, 0x7788ab ) AM_WRITEONLY      AM_BASE( &metro_rombank   )      // Rom Bank
1807   AM_RANGE( 0x7788ac, 0x7788ad ) AM_WRITEONLY      AM_BASE( &metro_screenctrl )   // Screen Control
1890   AM_RANGE(0x7788aa, 0x7788ab) AM_WRITEONLY AM_BASE_MEMBER(metro_state, rombank)         // Rom Bank
1891   AM_RANGE(0x7788ac, 0x7788ad) AM_WRITEONLY AM_BASE_MEMBER(metro_state, screenctrl)         // Screen Control
18081892
1809   AM_RANGE( 0x7f2000, 0x7f3fff ) AM_RAM
1893   AM_RANGE(0x7f2000, 0x7f3fff) AM_RAM
18101894
1811   AM_RANGE( 0x7f8880, 0x7f8881 ) AM_READ_PORT("IN1")
1812   AM_RANGE( 0x7f8884, 0x7f8885 ) AM_READ_PORT("DSW0")
1813   AM_RANGE( 0x7f8886, 0x7f8887 ) AM_READ_PORT("DSW0")
1895   AM_RANGE(0x7f8880, 0x7f8881) AM_READ_PORT("IN1")
1896   AM_RANGE(0x7f8884, 0x7f8885) AM_READ_PORT("DSW0")
1897   AM_RANGE(0x7f8886, 0x7f8887) AM_READ_PORT("DSW0")
18141898
1815   AM_RANGE( 0x7f88a2, 0x7f88a3 ) AM_READ( metro_irq_cause_r )   // IRQ Cause
1899   AM_RANGE(0x7f88a2, 0x7f88a3) AM_READ(metro_irq_cause_r)                     // IRQ Cause
18161900ADDRESS_MAP_END
18171901
18181902
18191903static WRITE8_HANDLER( puzzlet_portb_w )
18201904{
1821//  popmessage("PORTB %02x",data);
1905//  popmessage("PORTB %02x", data);
18221906}
18231907
18241908static ADDRESS_MAP_START( puzzlet_io_map, ADDRESS_SPACE_IO, 8 )
1825   AM_RANGE( H8_PORT_7,   H8_PORT_7   )   AM_READ_PORT("IN2")
1826   AM_RANGE( H8_SERIAL_1,   H8_SERIAL_1   )   AM_READ_PORT("IN0")      // coin
1827   AM_RANGE( H8_PORT_B,   H8_PORT_B   )   AM_READ_PORT("DSW0") AM_WRITE( puzzlet_portb_w )
1909   AM_RANGE(H8_PORT_7,   H8_PORT_7) AM_READ_PORT("IN2")
1910   AM_RANGE(H8_SERIAL_1, H8_SERIAL_1) AM_READ_PORT("IN0")      // coin
1911   AM_RANGE(H8_PORT_B,   H8_PORT_B) AM_READ_PORT("DSW0") AM_WRITE(puzzlet_portb_w)
18281912ADDRESS_MAP_END
18291913
18301914
r7640r7641
19992083   JOY_LSB(1, BUTTON1, UNKNOWN, UNKNOWN, UNKNOWN)
20002084   JOY_MSB(2, BUTTON1, UNKNOWN, UNKNOWN, UNKNOWN)
20012085
2002   PORT_START("DSW0")   // Strangely mapped in the 0xc00000-0xc1ffff range
2086   PORT_START("DSW0")   // Strangely mapped in the 0x300000-0x31ffff range
20032087   PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
20042088   PORT_DIPSETTING(      0x0002, DEF_STR( Easy )    )
20052089   PORT_DIPSETTING(      0x0003, DEF_STR( Normal )  )
r7640r7641
20452129   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
20462130   PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
20472131
2048   PORT_START("IN0")   // $d0000
2132   PORT_START("IN0")   // $200004
20492133   COINS
20502134
2051   PORT_START("IN2")   // Strangely mapped in the 0xc00000-0xc1ffff range
2135   PORT_START("IN2")   // Strangely mapped in the 0x300000-0x31ffff range
20522136   PORT_DIPNAME( 0x0001, 0x0001, "0" )
20532137   PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
20542138   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
r7640r7641
21002184INPUT_PORTS_END
21012185
21022186/***************************************************************************
2187                             Mouse Shooter GoGo
2188***************************************************************************/
2189
2190static INPUT_PORTS_START( msgogo )
2191   PORT_START("COINS")   // $200000
2192   COINS
2193
2194   PORT_START("JOYS")   // $200002
2195   JOY_LSB(1, BUTTON1, BUTTON2, UNKNOWN, UNKNOWN)
2196   JOY_MSB(2, BUTTON1, BUTTON2, UNKNOWN, UNKNOWN)
2197
2198   PORT_START("DSW0")   // Strangely mapped in the 0x300000-0x31ffff range
2199   COINAGE_DSW
2200   PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) )
2201   PORT_DIPSETTING(      0x0200, DEF_STR( Easy )    )   // 0
2202   PORT_DIPSETTING(      0x0300, DEF_STR( Normal )  )   // 1
2203   PORT_DIPSETTING(      0x0100, DEF_STR( Hard )    )   // 2
2204   PORT_DIPSETTING(      0x0000, DEF_STR( Hardest ) )   // 3
2205   PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
2206   PORT_DIPSETTING(      0x0400, DEF_STR( Off ) )
2207   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2208   PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
2209   PORT_DIPSETTING(      0x0800, DEF_STR( Off ) )
2210   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2211   PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
2212   PORT_DIPSETTING(      0x1000, DEF_STR( Off ) )
2213   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2214   PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Lives ) )
2215   PORT_DIPSETTING(      0x2000, "2" )
2216   PORT_DIPSETTING(      0x0000, "3" )
2217   PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Demo_Sounds ) )
2218   PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
2219   PORT_DIPSETTING(      0x4000, DEF_STR( On ) )
2220   PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Language ) )
2221   PORT_DIPSETTING(      0x8000, DEF_STR( Japanese ) )
2222   PORT_DIPSETTING(      0x0000, DEF_STR( English ) )
2223
2224   PORT_START("IN2")   // Strangely mapped in the 0x300000-0x31ffff range
2225   // DSW3 is used for debug (it's not soldered on the PCB)
2226   PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
2227   PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
2228   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2229   PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
2230   PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
2231   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2232   PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
2233   PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
2234   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2235   PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
2236   PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
2237   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2238   PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
2239   PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
2240   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2241   PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
2242   PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
2243   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2244   PORT_DIPNAME( 0x0040, 0x0040, "Debug: Offset" )
2245   PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
2246   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2247   PORT_DIPNAME( 0x0080, 0x0080, "Debug: Menu" )
2248   PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
2249   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
2250INPUT_PORTS_END
2251
2252/***************************************************************************
21032253                            Blazing Tornado
21042254***************************************************************************/
21052255
r7640r7641
23532503INPUT_PORTS_END
23542504
23552505/***************************************************************************
2356                                Dai Toride
2506                                Daitoride
23572507***************************************************************************/
23582508
23592509/* If only ONE of the "Coinage" is set to "Free Play", it is in fact "5C_1C".
r7640r7641
34253575
34263576***************************************************************************/
34273577
3578static MACHINE_START( metro )
3579{
3580   metro_state *state = (metro_state *)machine->driver_data;
3581
3582   state->maincpu = devtag_get_device(machine, "maincpu");
3583   state->audiocpu = devtag_get_device(machine, "audiocpu");
3584   state->oki = devtag_get_device(machine, "oki");
3585   state->ymsnd = devtag_get_device(machine, "ymsnd");
3586   state->k053936 = devtag_get_device(machine, "k053936");
3587
3588   state_save_register_global(machine, state->blitter_bit);
3589   state_save_register_global(machine, state->irq_line);
3590   state_save_register_global_array(machine, state->requested_int);
3591   state_save_register_global(machine, state->soundstatus);
3592   state_save_register_global(machine, state->porta);
3593   state_save_register_global(machine, state->portb);
3594   state_save_register_global(machine, state->busy_sndcpu);
3595   state_save_register_global(machine, state->gakusai_oki_bank_lo);
3596   state_save_register_global(machine, state->gakusai_oki_bank_hi);
3597   state_save_register_global(machine, state->sprite_xoffs);
3598   state_save_register_global(machine, state->sprite_yoffs);
3599   state_save_register_global_array(machine, state->bg_tilemap_enable);
3600   state_save_register_global_array(machine, state->bg_tilemap_enable16);
3601}
3602
3603static MACHINE_RESET( metro )
3604{
3605   metro_state *state = (metro_state *)machine->driver_data;
3606
3607   if (state->irq_line == -1)
3608      cpu_set_irq_callback(devtag_get_device(machine, "maincpu"), metro_irq_callback);
3609}
3610
3611
34283612static const UPD7810_CONFIG metro_cpu_config =
34293613{
3430    TYPE_7810,
3431    metro_io_callback
3614   TYPE_7810,
3615   metro_io_callback
34323616};
34333617
34343618static MACHINE_DRIVER_START( balcube )
34353619
3620   /* driver data */
3621   MDRV_DRIVER_DATA(metro_state)
3622
34363623   /* basic machine hardware */
34373624   MDRV_CPU_ADD("maincpu", M68000, 16000000)
34383625   MDRV_CPU_PROGRAM_MAP(balcube_map)
34393626   MDRV_CPU_VBLANK_INT_HACK(metro_interrupt,10)   /* ? */
34403627
3628   MDRV_MACHINE_START(metro)
34413629   MDRV_MACHINE_RESET(metro)
34423630
34433631   /* video hardware */
r7640r7641
34663654
34673655static MACHINE_DRIVER_START( daitoa )
34683656
3657   /* driver data */
3658   MDRV_DRIVER_DATA(metro_state)
3659
34693660   /* basic machine hardware */
34703661   MDRV_CPU_ADD("maincpu", M68000, 16000000)
34713662   MDRV_CPU_PROGRAM_MAP(daitoa_map)
34723663   MDRV_CPU_VBLANK_INT_HACK(metro_interrupt,10)   /* ? */
34733664
3665   MDRV_MACHINE_START(metro)
34743666   MDRV_MACHINE_RESET(metro)
34753667
34763668   /* video hardware */
r7640r7641
34963688   MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
34973689MACHINE_DRIVER_END
34983690
3691
3692static MACHINE_DRIVER_START( msgogo )
3693
3694   /* driver data */
3695   MDRV_DRIVER_DATA(metro_state)
3696
3697   /* basic machine hardware */
3698   MDRV_CPU_ADD("maincpu", M68000, 16000000)
3699   MDRV_CPU_PROGRAM_MAP(msgogo_map)
3700   MDRV_CPU_VBLANK_INT_HACK(msgogo_interrupt,262)    /* ? */
3701
3702   MDRV_MACHINE_START(metro)
3703   MDRV_MACHINE_RESET(metro)
3704
3705   /* video hardware */
3706   MDRV_SCREEN_ADD("screen", RASTER)
3707   MDRV_SCREEN_REFRESH_RATE(60)
3708   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
3709   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
3710   MDRV_SCREEN_SIZE(320, 224)
3711   MDRV_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1)
3712
3713   MDRV_GFXDECODE(14220)
3714   MDRV_PALETTE_LENGTH(8192)
3715
3716   MDRV_VIDEO_START(metro_14220)
3717   MDRV_VIDEO_UPDATE(metro)
3718
3719   /* sound hardware */
3720   MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
3721
3722   MDRV_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
3723   MDRV_SOUND_CONFIG(ymf278b_config)
3724   MDRV_SOUND_ROUTE(0, "lspeaker", 1.0)
3725   MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
3726MACHINE_DRIVER_END
3727
3728
34993729static MACHINE_DRIVER_START( bangball )
35003730
3731   /* driver data */
3732   MDRV_DRIVER_DATA(metro_state)
3733
35013734   /* basic machine hardware */
35023735   MDRV_CPU_ADD("maincpu", M68000, 16000000)
35033736   MDRV_CPU_PROGRAM_MAP(bangball_map)
35043737   MDRV_CPU_VBLANK_INT("screen", bangball_interrupt)
35053738
3739   MDRV_MACHINE_START(metro)
35063740   MDRV_MACHINE_RESET(metro)
35073741
35083742   /* video hardware */
r7640r7641
35313765
35323766static MACHINE_DRIVER_START( batlbubl )
35333767
3768   /* driver data */
3769   MDRV_DRIVER_DATA(metro_state)
3770
35343771   /* basic machine hardware */
35353772   MDRV_CPU_ADD("maincpu", M68000, 16000000)
35363773   MDRV_CPU_PROGRAM_MAP(batlbubl_map)
35373774   MDRV_CPU_VBLANK_INT("screen", bangball_interrupt)
35383775
3776   MDRV_MACHINE_START(metro)
35393777   MDRV_MACHINE_RESET(metro)
35403778
35413779   /* video hardware */
r7640r7641
35633801
35643802static MACHINE_DRIVER_START( daitorid )
35653803
3804   /* driver data */
3805   MDRV_DRIVER_DATA(metro_state)
3806
35663807   /* basic machine hardware */
35673808   MDRV_CPU_ADD("maincpu", M68000, 16000000)
35683809   MDRV_CPU_PROGRAM_MAP(daitorid_map)
r7640r7641
35733814   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
35743815   MDRV_CPU_IO_MAP(daitorid_sound_io_map)
35753816
3817   MDRV_MACHINE_START(metro)
35763818   MDRV_MACHINE_RESET(metro)
35773819
35783820   /* video hardware */
r7640r7641
36063848
36073849static MACHINE_DRIVER_START( dharma )
36083850
3851   /* driver data */
3852   MDRV_DRIVER_DATA(metro_state)
3853
36093854   /* basic machine hardware */
36103855   MDRV_CPU_ADD("maincpu", M68000, 12000000)
36113856   MDRV_CPU_PROGRAM_MAP(dharma_map)
r7640r7641
36163861   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
36173862   MDRV_CPU_IO_MAP(metro_sound_io_map)
36183863
3864   MDRV_MACHINE_START(metro)
36193865   MDRV_MACHINE_RESET(metro)
36203866
36213867   /* video hardware */
r7640r7641
36483894
36493895static MACHINE_DRIVER_START( karatour )
36503896
3897   /* driver data */
3898   MDRV_DRIVER_DATA(metro_state)
3899
36513900   /* basic machine hardware */
36523901   MDRV_CPU_ADD("maincpu", M68000, 12000000)
36533902   MDRV_CPU_PROGRAM_MAP(karatour_map)
r7640r7641
36583907   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
36593908   MDRV_CPU_IO_MAP(metro_sound_io_map)
36603909
3910   MDRV_MACHINE_START(metro)
36613911   MDRV_MACHINE_RESET(metro)
36623912
36633913   /* video hardware */
r7640r7641
36903940
36913941static MACHINE_DRIVER_START( 3kokushi )
36923942
3943   /* driver data */
3944   MDRV_DRIVER_DATA(metro_state)
3945
36933946   /* basic machine hardware */
36943947   MDRV_CPU_ADD("maincpu", M68000, 12000000)
36953948   MDRV_CPU_PROGRAM_MAP(kokushi_map)
r7640r7641
37003953   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
37013954   MDRV_CPU_IO_MAP(metro_sound_io_map)
37023955
3956   MDRV_MACHINE_START(metro)
37033957   MDRV_MACHINE_RESET(metro)
37043958
37053959   /* video hardware */
r7640r7641
37323986
37333987static MACHINE_DRIVER_START( lastfort )
37343988
3989   /* driver data */
3990   MDRV_DRIVER_DATA(metro_state)
3991
37353992   /* basic machine hardware */
37363993   MDRV_CPU_ADD("maincpu", M68000, 12000000)
37373994   MDRV_CPU_PROGRAM_MAP(lastfort_map)
r7640r7641
37423999   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
37434000   MDRV_CPU_IO_MAP(metro_sound_io_map)
37444001
4002   MDRV_MACHINE_START(metro)
37454003   MDRV_MACHINE_RESET(metro)
37464004
37474005   /* video hardware */
r7640r7641
37734031
37744032static MACHINE_DRIVER_START( lastforg )
37754033
4034   /* driver data */
4035   MDRV_DRIVER_DATA(metro_state)
4036
37764037   /* basic machine hardware */
37774038   MDRV_CPU_ADD("maincpu", M68000, 12000000)
37784039   MDRV_CPU_PROGRAM_MAP(lastforg_map)
r7640r7641
37834044   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
37844045   MDRV_CPU_IO_MAP(metro_sound_io_map)
37854046
4047   MDRV_MACHINE_START(metro)
37864048   MDRV_MACHINE_RESET(metro)
37874049
37884050   /* video hardware */
r7640r7641
38144076
38154077static MACHINE_DRIVER_START( dokyusei )
38164078
4079   /* driver data */
4080   MDRV_DRIVER_DATA(metro_state)
4081
38174082   /* basic machine hardware */
38184083   MDRV_CPU_ADD("maincpu", M68000, 16000000)
38194084   MDRV_CPU_PROGRAM_MAP(dokyusei_map)
38204085   MDRV_CPU_VBLANK_INT_HACK(dokyusei_interrupt,2)   /* ? */
38214086
4087   MDRV_MACHINE_START(metro)
38224088   MDRV_MACHINE_RESET(metro)
38234089
38244090   /* video hardware */
r7640r7641
38504116
38514117static MACHINE_DRIVER_START( dokyusp )
38524118
4119   /* driver data */
4120   MDRV_DRIVER_DATA(metro_state)
4121
38534122   /* basic machine hardware */
38544123   MDRV_CPU_ADD("maincpu", M68000, 16000000)
38554124   MDRV_CPU_PROGRAM_MAP(dokyusp_map)
38564125   MDRV_CPU_VBLANK_INT("screen", gakusai_interrupt)
38574126
4127   MDRV_MACHINE_START(metro)
38584128   MDRV_MACHINE_RESET(metro)
38594129   MDRV_EEPROM_93C46_ADD("eeprom")
38604130
r7640r7641
38884158
38894159static MACHINE_DRIVER_START( gakusai )
38904160
4161   /* driver data */
4162   MDRV_DRIVER_DATA(metro_state)
4163
38914164   /* basic machine hardware */
38924165   MDRV_CPU_ADD("maincpu", M68000, 16000000)
38934166   MDRV_CPU_PROGRAM_MAP(gakusai_map)
38944167   MDRV_CPU_VBLANK_INT("screen", gakusai_interrupt)
38954168
4169   MDRV_MACHINE_START(metro)
38964170   MDRV_MACHINE_RESET(metro)
38974171   MDRV_EEPROM_93C46_ADD("eeprom")
38984172
r7640r7641
39264200
39274201static MACHINE_DRIVER_START( gakusai2 )
39284202
4203   /* driver data */
4204   MDRV_DRIVER_DATA(metro_state)
4205
39294206   /* basic machine hardware */
39304207   MDRV_CPU_ADD("maincpu", M68000, 16000000)
39314208   MDRV_CPU_PROGRAM_MAP(gakusai2_map)
39324209   MDRV_CPU_VBLANK_INT("screen", gakusai_interrupt)
39334210
4211   MDRV_MACHINE_START(metro)
39344212   MDRV_MACHINE_RESET(metro)
39354213   MDRV_EEPROM_93C46_ADD("eeprom")
39364214
r7640r7641
39644242
39654243static MACHINE_DRIVER_START( pangpoms )
39664244
4245   /* driver data */
4246   MDRV_DRIVER_DATA(metro_state)
4247
39674248   /* basic machine hardware */
39684249   MDRV_CPU_ADD("maincpu", M68000, 12000000)
39694250   MDRV_CPU_PROGRAM_MAP(pangpoms_map)
r7640r7641
39744255   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
39754256   MDRV_CPU_IO_MAP(metro_sound_io_map)
39764257
4258   MDRV_MACHINE_START(metro)
39774259   MDRV_MACHINE_RESET(metro)
39784260
39794261   /* video hardware */
r7640r7641
40064288
40074289static MACHINE_DRIVER_START( poitto )
40084290
4291   /* driver data */
4292   MDRV_DRIVER_DATA(metro_state)
4293
40094294   /* basic machine hardware */
40104295   MDRV_CPU_ADD("maincpu", M68000, 12000000)
40114296   MDRV_CPU_PROGRAM_MAP(poitto_map)
r7640r7641
40164301   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
40174302   MDRV_CPU_IO_MAP(metro_sound_io_map)
40184303
4304   MDRV_MACHINE_START(metro)
40194305   MDRV_MACHINE_RESET(metro)
40204306
40214307   /* video hardware */
r7640r7641
40484334
40494335static MACHINE_DRIVER_START( pururun )
40504336
4337   /* driver data */
4338   MDRV_DRIVER_DATA(metro_state)
4339
40514340   /* basic machine hardware */
40524341   MDRV_CPU_ADD("maincpu", M68000, 12000000)
40534342   MDRV_CPU_PROGRAM_MAP(pururun_map)
4054   MDRV_CPU_VBLANK_INT_HACK(metro_interrupt,10)   /* ? */
4343   //MDRV_CPU_VBLANK_INT_HACK(msgogo_interrupt,262)    /* fixes the title screen scroll in GunMaster, but makes the game painfully slow */
4344   MDRV_CPU_VBLANK_INT_HACK(metro_interrupt,10)    /* ? */
40554345
40564346   MDRV_CPU_ADD("audiocpu", UPD7810, 12000000)
40574347   MDRV_CPU_CONFIG(metro_cpu_config)
40584348   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
40594349   MDRV_CPU_IO_MAP(daitorid_sound_io_map)
40604350
4351   MDRV_MACHINE_START(metro)
40614352   MDRV_MACHINE_RESET(metro)
40624353
40634354   /* video hardware */
r7640r7641
40914382
40924383static MACHINE_DRIVER_START( skyalert )
40934384
4385   /* driver data */
4386   MDRV_DRIVER_DATA(metro_state)
4387
40944388   /* basic machine hardware */
40954389   MDRV_CPU_ADD("maincpu", M68000, 12000000)
40964390   MDRV_CPU_PROGRAM_MAP(skyalert_map)
r7640r7641
41014395   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
41024396   MDRV_CPU_IO_MAP(metro_sound_io_map)
41034397
4398   MDRV_MACHINE_START(metro)
41044399   MDRV_MACHINE_RESET(metro)
41054400
41064401   /* video hardware */
r7640r7641
41334428
41344429static MACHINE_DRIVER_START( toride2g )
41354430
4431   /* driver data */
4432   MDRV_DRIVER_DATA(metro_state)
4433
41364434   /* basic machine hardware */
41374435   MDRV_CPU_ADD("maincpu", M68000, 12000000)
41384436   MDRV_CPU_PROGRAM_MAP(toride2g_map)
r7640r7641
41434441   MDRV_CPU_PROGRAM_MAP(metro_sound_map)
41444442   MDRV_CPU_IO_MAP(metro_sound_io_map)
41454443
4444   MDRV_MACHINE_START(metro)
41464445   MDRV_MACHINE_RESET(metro)
41474446
41484447   /* video hardware */
r7640r7641
41754474
41764475static MACHINE_DRIVER_START( mouja )
41774476
4477   /* driver data */
4478   MDRV_DRIVER_DATA(metro_state)
4479
41784480   /* basic machine hardware */
41794481   MDRV_CPU_ADD("maincpu", M68000, 12000000)   /* ??? */
41804482   MDRV_CPU_PROGRAM_MAP(mouja_map)
41814483   MDRV_CPU_VBLANK_INT("screen", mouja_interrupt)
41824484
4485   MDRV_MACHINE_START(metro)
41834486   MDRV_MACHINE_RESET(metro)
41844487
41854488   /* video hardware */
r7640r7641
42164519
42174520static MACHINE_DRIVER_START( blzntrnd )
42184521
4522   /* driver data */
4523   MDRV_DRIVER_DATA(metro_state)
4524
42194525   /* basic machine hardware */
42204526   MDRV_CPU_ADD("maincpu", M68000, 16000000)
42214527   MDRV_CPU_PROGRAM_MAP(blzntrnd_map)
r7640r7641
42254531   MDRV_CPU_PROGRAM_MAP(blzntrnd_sound_map)
42264532   MDRV_CPU_IO_MAP(blzntrnd_sound_io_map)
42274533
4534   MDRV_MACHINE_START(metro)
42284535   MDRV_MACHINE_RESET(metro)
42294536
42304537   /* video hardware */
r7640r7641
42634570
42644571static MACHINE_DRIVER_START( gstrik2 )
42654572
4573   /* driver data */
4574   MDRV_DRIVER_DATA(metro_state)
4575
42664576   /* basic machine hardware */
42674577   MDRV_CPU_ADD("maincpu", M68000, 16000000)
42684578   MDRV_CPU_PROGRAM_MAP(blzntrnd_map)
r7640r7641
42724582   MDRV_CPU_PROGRAM_MAP(blzntrnd_sound_map)
42734583   MDRV_CPU_IO_MAP(blzntrnd_sound_io_map)
42744584
4585   MDRV_MACHINE_START(metro)
42754586   MDRV_MACHINE_RESET(metro)
42764587
42774588   /* video hardware */
r7640r7641
43044615
43054616static INTERRUPT_GEN( puzzlet_interrupt )
43064617{
4307   switch ( cpu_getiloops(device) )
4618   metro_state *state = (metro_state *)device->machine->driver_data;
4619
4620   switch (cpu_getiloops(device))
43084621   {
43094622      case 0:
4310         requested_int[1] = 1;
4623         state->requested_int[1] = 1;
43114624         update_irq_state(device->machine);
43124625         break;
43134626
43144627      case 1:
4315         requested_int[3] = 1;
4628         state->requested_int[3] = 1;
43164629         update_irq_state(device->machine);
43174630         break;
43184631
43194632      case 2:
4320         requested_int[5] = 1;
4633         state->requested_int[5] = 1;
43214634         update_irq_state(device->machine);
43224635         break;
43234636
43244637      case 3:
4325         requested_int[2] = 1;
4638         state->requested_int[2] = 1;
43264639         update_irq_state(device->machine);
43274640         break;
43284641
43294642      default:
43304643         // timer
4331         cputag_set_input_line(device->machine, "maincpu", H8_METRO_TIMER_HACK, HOLD_LINE);
4644         cpu_set_input_line(state->maincpu, H8_METRO_TIMER_HACK, HOLD_LINE);
43324645         break;
43334646   }
43344647}
4648
43354649static MACHINE_DRIVER_START( puzzlet )
43364650
4651   /* driver data */
4652   MDRV_DRIVER_DATA(metro_state)
4653
43374654   /* basic machine hardware */
43384655   MDRV_CPU_ADD("maincpu", H83007, XTAL_20MHz)   // H8/3007 - Hitachi HD6413007F20 CPU. Clock 20MHz
43394656   MDRV_CPU_PROGRAM_MAP(puzzlet_map)
43404657   MDRV_CPU_IO_MAP(puzzlet_io_map)
43414658   MDRV_CPU_VBLANK_INT_HACK(puzzlet_interrupt, 5)
43424659
4660   MDRV_MACHINE_START(metro)
43434661   MDRV_MACHINE_RESET(metro)
43444662
43454663   /* video hardware */
r7640r7641
43784696
43794697***************************************************************************/
43804698
4381static void metro_common(void)
4382{
4383   requested_int[0] = 0;
4384   requested_int[1] = 0;
4385   requested_int[2] = 0;
4386   requested_int[3] = 0;
4387   requested_int[4] = 0;
4388   requested_int[5] = 0;
4389   requested_int[6] = 0;
4390   requested_int[7] = 0;
4391
4392   irq_line   =   2;
4393
4394   blitter_bit   =   2;
4395
4396   *metro_irq_enable = 0;
4397}
4398
4399
4400static DRIVER_INIT( metro )
4401{
4402   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
4403
4404   metro_common();
4405
4406   porta = 0x00;
4407   portb = 0x00;
4408   busy_sndcpu = 0;
4409   metro_sound_rombank_w(space, 0, 0x00);
4410}
4411
4412static DRIVER_INIT( karatour )
4413{
4414   UINT16 *RAM = auto_alloc_array(machine, UINT16, 0x20000*3/2);
4415int i;
4416   metro_vram_0 = RAM + (0x20000/2) * 0;
4417   metro_vram_1 = RAM + (0x20000/2) * 1;
4418   metro_vram_2 = RAM + (0x20000/2) * 2;
4419for (i = 0;i < (0x20000*3)/2;i++)
4420   RAM[i] = mame_rand(machine);
4421
4422   DRIVER_INIT_CALL(metro);
4423}
4424
4425static DRIVER_INIT( daitorid )
4426{
4427   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
4428
4429   metro_common();
4430
4431   porta = 0x00;
4432   portb = 0x00;
4433   busy_sndcpu = 0;
4434   daitorid_sound_rombank_w(space, 0, 0x00);
4435}
4436
4437
4438/* Unscramble the GFX ROMs */
4439static DRIVER_INIT( balcube )
4440{
4441   const size_t len   =   memory_region_length(machine, "gfx1");
4442   UINT8 *src      =   memory_region(machine, "gfx1");
4443   UINT8 *end      =   src + len;
4444
4445   while(src < end)
4446   {
4447      static const UINT8 scramble[16] =
4448       { 0x0,0x8,0x4,0xc,0x2,0xa,0x6,0xe,0x1,0x9,0x5,0xd,0x3,0xb,0x7,0xf };
4449
4450      UINT8 data;
4451
4452      data  =  *src;
4453      *src  =  (scramble[data & 0xF] << 4) | scramble[data >> 4];
4454      src  +=  2;
4455   }
4456
4457   metro_common();
4458   irq_line = 1;
4459}
4460
4461
4462static DRIVER_INIT( dharmak )
4463{
4464   UINT8 *src = memory_region( machine, "gfx1" );
4465   int i;
4466   for (i=0;i<0x200000;i+=4)
4467   {
4468      UINT8 dat;
4469      dat = src[i+1];
4470      dat = BITSWAP8(dat, 7,3,2,4, 5,6,1,0);
4471      src[i+1] = dat;
4472
4473      dat = src[i+3];
4474      dat = BITSWAP8(dat, 7,2,5,4, 3,6,1,0);
4475      src[i+3] = dat;
4476   }
4477
4478   DRIVER_INIT_CALL(metro);
4479}
4480
4481static DRIVER_INIT( blzntrnd )
4482{
4483   metro_common();
4484   irq_line = 1;
4485}
4486
4487static DRIVER_INIT( mouja )
4488{
4489   metro_common();
4490   irq_line = -1;   /* split interrupt handlers */
4491   mouja_irq_timer = timer_alloc(machine, mouja_irq_callback, NULL);
4492}
4493
4494static DRIVER_INIT( gakusai )
4495{
4496   metro_common();
4497   irq_line = -1;
4498   blitter_bit = 3;
4499}
4500
4501static DRIVER_INIT( puzzlet )
4502{
4503   metro_common();
4504   irq_line = 0;
4505   blitter_bit = 0;
4506}
4507
45084699/***************************************************************************
45094700
45104701Bal Cube
r7640r7641
45584749   ROMX_LOAD( "dt_ja-3.3", 0x000006, 0x080000, CRC(32353e04) SHA1(16ac82de9e6e43eabef3adab2d3a006bb50100fb) , ROM_GROUPWORD | ROM_SKIP(6))
45594750
45604751   ROM_REGION( 0x280000, "ymf", 0 )
4561   ROM_LOAD( "yrw801-m", 0x000000, 0x200000, CRC(2a9d8d43) SHA1(32760893ce06dbe3930627755ba065cc3d8ec6ca) )       // Yamaha YRW801 2MB ROM with samples for the OPL4.
4562   ROM_LOAD( "dt_ja-7.7",        0x200000, 0x080000, CRC(7a2d3222) SHA1(1a16bf483a5a086ad48029dd23dd16ad47c3740e) )       // PCM 16 Bit (Signed)
4752   ROM_LOAD( "yrw801-m",  0x000000, 0x200000, CRC(2a9d8d43) SHA1(32760893ce06dbe3930627755ba065cc3d8ec6ca) )       // Yamaha YRW801 2MB ROM with samples for the OPL4.
4753   ROM_LOAD( "dt_ja-7.7", 0x200000, 0x080000, CRC(7a2d3222) SHA1(1a16bf483a5a086ad48029dd23dd16ad47c3740e) )       // PCM 16 Bit (Signed)
45634754ROM_END
45644755
45654756
r7640r7641
47434934
47444935*/
47454936
4937
4938/* The MASK roms weren't dumped from this set, but it's safe to assume they're the same in this case */
47464939ROM_START( gstrik2 )
47474940   ROM_REGION( 0x200000, "maincpu", 0 )   /* 68000 */
4748   ROM_LOAD16_BYTE( "prg0.107", 0x000000, 0x80000, CRC(e60a8c19) SHA1(19be6cfcb60ede6fd4eb2e14914b174107c4b52d) )
4749   ROM_LOAD16_BYTE( "prg1.108", 0x000001, 0x80000, CRC(853f6f7c) SHA1(8fb9d7cd0390f620560a1669bb13f2033eed7c81) )
4941   ROM_LOAD16_BYTE( "hum_003_g2f.rom1.u107", 0x000000, 0x80000, CRC(2712d9ca) SHA1(efa967de931728534a663fa1529e92003afbb3e9) )
4942   ROM_LOAD16_BYTE( "hum_003_g2f.rom2.u108", 0x000001, 0x80000, CRC(86785c64) SHA1(ef172d6e859a68eb80f7c127b61883d50eefb0fe) )
47504943   ROM_LOAD16_BYTE( "prg2.109", 0x100000, 0x80000, CRC(ead86919) SHA1(eb9b68dff4e08d90ac90043c7f3021914caa007d) )
47514944   ROM_LOAD16_BYTE( "prg3.110", 0x100001, 0x80000, CRC(e0b026e3) SHA1(05f75c0432efda3dec0372199382e310bb268fba) )
47524945
r7640r7641
47834976   /* ROM7.27 not populated?  */
47844977ROM_END
47854978
4786ROM_START( gstrik2e )
4979ROM_START( gstrik2j )
47874980   ROM_REGION( 0x200000, "maincpu", 0 )   /* 68000 */
4788   ROM_LOAD16_BYTE( "hum_003_g2f.rom1.u107", 0x000000, 0x80000, CRC(2712d9ca) SHA1(efa967de931728534a663fa1529e92003afbb3e9) )
4789   ROM_LOAD16_BYTE( "hum_003_g2f.rom2.u108", 0x000001, 0x80000, CRC(86785c64) SHA1(ef172d6e859a68eb80f7c127b61883d50eefb0fe) )
4790   ROM_LOAD16_BYTE( "prg2.109", 0x100000, 0x80000, BAD_DUMP CRC(ead86919) SHA1(eb9b68dff4e08d90ac90043c7f3021914caa007d) )
4791   ROM_LOAD16_BYTE( "prg3.110", 0x100001, 0x80000, BAD_DUMP CRC(e0b026e3) SHA1(05f75c0432efda3dec0372199382e310bb268fba) )
4981   ROM_LOAD16_BYTE( "prg0.107", 0x000000, 0x80000, CRC(e60a8c19) SHA1(19be6cfcb60ede6fd4eb2e14914b174107c4b52d) )
4982   ROM_LOAD16_BYTE( "prg1.108", 0x000001, 0x80000, CRC(853f6f7c) SHA1(8fb9d7cd0390f620560a1669bb13f2033eed7c81) )
4983   ROM_LOAD16_BYTE( "prg2.109", 0x100000, 0x80000, CRC(ead86919) SHA1(eb9b68dff4e08d90ac90043c7f3021914caa007d) )
4984   ROM_LOAD16_BYTE( "prg3.110", 0x100001, 0x80000, CRC(e0b026e3) SHA1(05f75c0432efda3dec0372199382e310bb268fba) )
47924985
47934986   ROM_REGION( 0x20000, "audiocpu", 0 )   /* Z80 */
4794   ROM_LOAD( "sprg.30", 0x0000, 0x20000, BAD_DUMP CRC(aeef6045) SHA1(61b8c89ca495d3aac79e53413a85dd203db816f3) )
4987   ROM_LOAD( "sprg.30", 0x0000, 0x20000, CRC(aeef6045) SHA1(61b8c89ca495d3aac79e53413a85dd203db816f3) )
47954988
47964989   ROM_REGION( 0x1000000, "gfx1", 0 )   /* Gfx + Data (Addressable by CPU & Blitter) */
4797   ROMX_LOAD( "chr0.80", 0x0000000, 0x200000, BAD_DUMP CRC(f63a52a9) SHA1(1ad52bb3a051eaffe8fb6ba49d4fc1d0b6144156) , ROM_GROUPWORD | ROM_SKIP(6))
4798   ROMX_LOAD( "chr1.79", 0x0000002, 0x200000, BAD_DUMP CRC(4110c184) SHA1(90ccb3d50eff7a655336cfa9c072f7213589e64c) , ROM_GROUPWORD | ROM_SKIP(6))
4799   ROMX_LOAD( "chr2.78", 0x0000004, 0x200000, BAD_DUMP CRC(ddb4b9ee) SHA1(0e2c151c3690b9c3d298dda8842e283660d37386) , ROM_GROUPWORD | ROM_SKIP(6))
4800   ROMX_LOAD( "chr3.77", 0x0000006, 0x200000, BAD_DUMP CRC(5ab367db) SHA1(adf8749451f4583f8e9e00ab61f3408d804a7265) , ROM_GROUPWORD | ROM_SKIP(6))
4801   ROMX_LOAD( "chr4.84", 0x0800000, 0x200000, BAD_DUMP CRC(77d7ef99) SHA1(8f5cf72f5919fe9363e7549e0bb1b3ee633cec3b) , ROM_GROUPWORD | ROM_SKIP(6))
4802   ROMX_LOAD( "chr5.83", 0x0800002, 0x200000, BAD_DUMP CRC(a4d49e95) SHA1(9789bacba7876100e0f0293f54c81def545ed068) , ROM_GROUPWORD | ROM_SKIP(6))
4803   ROMX_LOAD( "chr6.82", 0x0800004, 0x200000, BAD_DUMP CRC(32eb33b0) SHA1(2ea06484ca326b44a35ee470343147a9d91d5626) , ROM_GROUPWORD | ROM_SKIP(6))
4804   ROMX_LOAD( "chr7.81", 0x0800006, 0x200000, BAD_DUMP CRC(2d30a21e) SHA1(749e86b7935ef71556eaee4caf6f954634e9bcbf) , ROM_GROUPWORD | ROM_SKIP(6))
4990   ROMX_LOAD( "chr0.80", 0x0000000, 0x200000, CRC(f63a52a9) SHA1(1ad52bb3a051eaffe8fb6ba49d4fc1d0b6144156) , ROM_GROUPWORD | ROM_SKIP(6))
4991   ROMX_LOAD( "chr1.79", 0x0000002, 0x200000, CRC(4110c184) SHA1(90ccb3d50eff7a655336cfa9c072f7213589e64c) , ROM_GROUPWORD | ROM_SKIP(6))
4992   ROMX_LOAD( "chr2.78", 0x0000004, 0x200000, CRC(ddb4b9ee) SHA1(0e2c151c3690b9c3d298dda8842e283660d37386) , ROM_GROUPWORD | ROM_SKIP(6))
4993   ROMX_LOAD( "chr3.77", 0x0000006, 0x200000, CRC(5ab367db) SHA1(adf8749451f4583f8e9e00ab61f3408d804a7265) , ROM_GROUPWORD | ROM_SKIP(6))
4994   ROMX_LOAD( "chr4.84", 0x0800000, 0x200000, CRC(77d7ef99) SHA1(8f5cf72f5919fe9363e7549e0bb1b3ee633cec3b) , ROM_GROUPWORD | ROM_SKIP(6))
4995   ROMX_LOAD( "chr5.83", 0x0800002, 0x200000, CRC(a4d49e95) SHA1(9789bacba7876100e0f0293f54c81def545ed068) , ROM_GROUPWORD | ROM_SKIP(6))
4996   ROMX_LOAD( "chr6.82", 0x0800004, 0x200000, CRC(32eb33b0) SHA1(2ea06484ca326b44a35ee470343147a9d91d5626) , ROM_GROUPWORD | ROM_SKIP(6))
4997   ROMX_LOAD( "chr7.81", 0x0800006, 0x200000, CRC(2d30a21e) SHA1(749e86b7935ef71556eaee4caf6f954634e9bcbf) , ROM_GROUPWORD | ROM_SKIP(6))
48054998   /* not populated */
48064999//  ROMX_LOAD( "chr8.88", 0x1000000, 0x200000, CRC() SHA1() , ROM_GROUPWORD | ROM_SKIP(6))
48075000//  ROMX_LOAD( "chr9.87", 0x1000002, 0x200000, CRC() SHA1() , ROM_GROUPWORD | ROM_SKIP(6))
r7640r7641
48135006//  ROMX_LOAD( "chr15.89", 0x1800006, 0x200000, CRC() SHA1() , ROM_GROUPWORD | ROM_SKIP(6))
48145007
48155008   ROM_REGION( 0x200000, "gfx3", 0 )   /* 053936 gfx data */
4816   ROM_LOAD( "psacrom.60", 0x000000, 0x200000,  BAD_DUMP CRC(73f1f279) SHA1(1135b2b1eb4c52249bc12ee178340bbb202a94c8) )
5009   ROM_LOAD( "psacrom.60", 0x000000, 0x200000,  CRC(73f1f279) SHA1(1135b2b1eb4c52249bc12ee178340bbb202a94c8) )
48175010
48185011   ROM_REGION( 0x200000, "ymsnd.deltat", 0 )   /* Samples */
4819   ROM_LOAD( "sndpcm-b.22", 0x000000, 0x200000, BAD_DUMP CRC(a5d844d2) SHA1(18d644545f0844e66aa53775b67b0a29c7b7c31b) )
5012   ROM_LOAD( "sndpcm-b.22", 0x000000, 0x200000, CRC(a5d844d2) SHA1(18d644545f0844e66aa53775b67b0a29c7b7c31b) )
48205013
48215014   ROM_REGION( 0x400000, "ymsnd", 0 )   /* ? YRW801-M ? */
4822   ROM_LOAD( "sndpcm-a.23", 0x000000, 0x200000, BAD_DUMP CRC(e6d32373) SHA1(8a79d4ea8b27d785fffd80e38d5ae73b7cea7304) )
5015   ROM_LOAD( "sndpcm-a.23", 0x000000, 0x200000, CRC(e6d32373) SHA1(8a79d4ea8b27d785fffd80e38d5ae73b7cea7304) )
48235016   /* ROM7.27 not populated?  */
48245017ROM_END
48255018
5019
48265020/***************************************************************************
48275021
48285022Daitoride
r7640r7641
54495643
54505644/***************************************************************************
54515645
5646Mouse Shooter GoGO, Metro, 1995
5647
5648ms_ja-1.1    tms27c240
5649ms_wa-2.2    tms27c240
5650ms_wa-3.3    tms27c240
5651ms_wa-4.4    tms27c240
5652ms_wa-5.5    tms27c020
5653ms_wa-6.6    tms27c020
5654ms_wa-7.7    hn27c4001g
5655
5656Stefan Lindberg
5657
5658***************************************************************************/
5659
5660ROM_START( msgogo )
5661   ROM_REGION( 0x080000, "maincpu", 0 )      /* 68000 Code */
5662   ROM_LOAD16_BYTE( "ms_wa-6.6", 0x000000, 0x040000, CRC(986acac8) SHA1(97c24f5b730aa811951db4c7e9c894c0701c58fd) )
5663   ROM_LOAD16_BYTE( "ms_wa-5.5", 0x000001, 0x040000, CRC(746d9f99) SHA1(6e3e34dfb67fecc93213fe040465eccd88575822) )
5664
5665   ROM_REGION( 0x200000, "gfx1", 0 )   /* Gfx + Data (Addressable by CPU & Blitter) */
5666   ROMX_LOAD( "ms_wa-2.2", 0x000000, 0x080000, CRC(0d36c2b9) SHA1(3fd6631ad657c73e7e6bfdff9d9caf5ab044bdeb), ROM_GROUPWORD | ROM_SKIP(6))
5667   ROMX_LOAD( "ms_wa-4.4", 0x000002, 0x080000, CRC(fd387126) SHA1(a2f82a66b098a97d8f245e3c2f96c31c63642fec), ROM_GROUPWORD | ROM_SKIP(6))
5668   ROMX_LOAD( "ms_ja-1.1", 0x000004, 0x080000, CRC(8ec4e81d) SHA1(46947ad2941af154f91e47acee281302a12e3aa5), ROM_GROUPWORD | ROM_SKIP(6))
5669   ROMX_LOAD( "ms_wa-3.3", 0x000006, 0x080000, CRC(06cb6807) SHA1(d7303b4047983117cd33e057b1f4b98ed3f7dd32), ROM_GROUPWORD | ROM_SKIP(6))
5670
5671   ROM_REGION( 0x280000, "ymf", 0 )
5672   ROM_LOAD( "yrw801-m",  0x000000, 0x200000, CRC(2a9d8d43) SHA1(32760893ce06dbe3930627755ba065cc3d8ec6ca) )
5673   ROM_LOAD( "ms_wa-7.7", 0x200000, 0x080000, CRC(e19941cb) SHA1(93777c9cd22ddd33d9584b6edad33b95c1e28bde) )
5674ROM_END
5675
5676
5677/***************************************************************************
5678
54525679Pang Pom's (c) 1992 Metro
54535680
54545681Pcb code:  VG420 (Same as Toride)
r7640r7641
58646091   ROM_LOAD( "pcm.3g", 0x000000, 0x020000, CRC(6ee32315) SHA1(ef4d59576929deab0aa459a67be21d97c2803dea) )
58656092ROM_END
58666093
6094
58676095/***************************************************************************
58686096
58696097
6098                                Driver Inits
6099
6100
6101***************************************************************************/
6102
6103static void metro_common( running_machine *machine )
6104{
6105   metro_state *state = (metro_state *)machine->driver_data;
6106
6107   memset(state->requested_int, 0, ARRAY_LENGTH(state->requested_int));
6108   state->irq_line = 2;
6109   state->blitter_bit = 2;
6110
6111   *state->irq_enable = 0;
6112}
6113
6114
6115static DRIVER_INIT( metro )
6116{
6117   metro_state *state = (metro_state *)machine->driver_data;
6118   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
6119
6120   metro_common(machine);
6121
6122   state->porta = 0x00;
6123   state->portb = 0x00;
6124   state->busy_sndcpu = 0;
6125   metro_sound_rombank_w(space, 0, 0x00);
6126}
6127
6128static DRIVER_INIT( karatour )
6129{
6130   metro_state *state = (metro_state *)machine->driver_data;
6131   UINT16 *RAM = auto_alloc_array(machine, UINT16, 0x20000*3/2);
6132   int i;
6133
6134   state->vram_0 = RAM + (0x20000/2) * 0;
6135   state->vram_1 = RAM + (0x20000/2) * 1;
6136   state->vram_2 = RAM + (0x20000/2) * 2;
6137
6138   for (i = 0; i < (0x20000 * 3) / 2; i++)
6139      RAM[i] = mame_rand(machine);
6140
6141   DRIVER_INIT_CALL(metro);
6142
6143   state_save_register_global_pointer(machine, state->vram_0, 0x20000/2);
6144   state_save_register_global_pointer(machine, state->vram_1, 0x20000/2);
6145   state_save_register_global_pointer(machine, state->vram_2, 0x20000/2);
6146}
6147
6148static DRIVER_INIT( daitorid )
6149{
6150   metro_state *state = (metro_state *)machine->driver_data;
6151   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
6152
6153   metro_common(machine);
6154
6155   state->porta = 0x00;
6156   state->portb = 0x00;
6157   state->busy_sndcpu = 0;
6158   daitorid_sound_rombank_w(space, 0, 0x00);
6159}
6160
6161
6162/* Unscramble the GFX ROMs */
6163static DRIVER_INIT( balcube )
6164{
6165   metro_state *state = (metro_state *)machine->driver_data;
6166
6167   const size_t len = memory_region_length(machine, "gfx1");
6168   UINT8 *src       = memory_region(machine, "gfx1");
6169   UINT8 *end       = src + len;
6170
6171   while (src < end)
6172   {
6173      static const UINT8 scramble[16] = { 0x0,0x8,0x4,0xc,0x2,0xa,0x6,0xe,0x1,0x9,0x5,0xd,0x3,0xb,0x7,0xf };
6174      UINT8 data;
6175
6176      data  = *src;
6177      *src  = (scramble[data & 0x0f] << 4) | scramble[data >> 4];
6178      src   +=  2;
6179   }
6180
6181   metro_common(machine);
6182   state->irq_line = 1;
6183}
6184
6185
6186static DRIVER_INIT( dharmak )
6187{
6188   UINT8 *src = memory_region( machine, "gfx1" );
6189   int i;
6190
6191   for (i = 0; i < 0x200000; i += 4)
6192   {
6193      UINT8 dat;
6194      dat = src[i + 1];
6195      dat = BITSWAP8(dat, 7,3,2,4, 5,6,1,0);
6196      src[i + 1] = dat;
6197
6198      dat = src[i + 3];
6199      dat = BITSWAP8(dat, 7,2,5,4, 3,6,1,0);
6200      src[i + 3] = dat;
6201   }
6202
6203   DRIVER_INIT_CALL(metro);
6204}
6205
6206static DRIVER_INIT( blzntrnd )
6207{
6208   metro_state *state = (metro_state *)machine->driver_data;
6209   metro_common(machine);
6210   state->irq_line = 1;
6211}
6212
6213static DRIVER_INIT( mouja )
6214{
6215   metro_state *state = (metro_state *)machine->driver_data;
6216   metro_common(machine);
6217   state->irq_line = -1;   /* split interrupt handlers */
6218   state->mouja_irq_timer = timer_alloc(machine, mouja_irq_callback, NULL);
6219}
6220
6221static DRIVER_INIT( gakusai )
6222{
6223   metro_state *state = (metro_state *)machine->driver_data;
6224   metro_common(machine);
6225   state->irq_line = -1;
6226   state->blitter_bit = 3;
6227}
6228
6229static DRIVER_INIT( puzzlet )
6230{
6231   metro_state *state = (metro_state *)machine->driver_data;
6232   metro_common(machine);
6233   state->irq_line = 0;
6234   state->blitter_bit = 0;
6235}
6236
6237/***************************************************************************
6238
6239
58706240                                Game Drivers
58716241
58726242
58736243***************************************************************************/
58746244
5875GAME( 1992, karatour, 0,        karatour, karatour, karatour, ROT0,   "Mitchell",                               "The Karate Tournament",             GAME_IMPERFECT_GRAPHICS )
5876GAME( 1992, pangpoms, 0,        pangpoms, pangpoms, metro,    ROT0,   "Metro",                                  "Pang Pom's",                        0 )
5877GAME( 1992, pangpomsm,pangpoms, pangpoms, pangpoms, metro,    ROT0,   "Metro (Mitchell license)",               "Pang Pom's (Mitchell)",             0 )
5878GAME( 1992, skyalert, 0,        skyalert, skyalert, metro,    ROT270, "Metro",                                  "Sky Alert",                         0 )
5879GAME( 1993, ladykill, 0,        karatour, ladykill, karatour, ROT90,  "Yanyaka (Mitchell license)",             "Lady Killer",                       GAME_IMPERFECT_GRAPHICS )
5880GAME( 1993, moegonta, ladykill, karatour, moegonta, karatour, ROT90,  "Yanyaka",                                "Moeyo Gonta!! (Japan)",             GAME_IMPERFECT_GRAPHICS )
5881GAME( 1993, poitto,   0,        poitto,   poitto,   metro,    ROT0,   "Metro / Able Corp.",                     "Poitto!",                           0 )
5882GAME( 1994, blzntrnd, 0,        blzntrnd, blzntrnd, blzntrnd, ROT0,   "Human Amusement",                        "Blazing Tornado",                   GAME_IMPERFECT_GRAPHICS )
5883GAME( 1994, dharma,   0,        dharma,   dharma,   metro,    ROT0,   "Metro",                                  "Dharma Doujou",                     0 )
5884GAME( 1994, dharmak,  dharma,   dharma,   dharma,   dharmak,  ROT0,   "Metro",                                  "Dharma Doujou (Korea)",             0 )
5885GAME( 1994, lastfort, 0,        lastfort, lastfort, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride",            0 )
5886GAME( 1994, lastforte,lastfort, lastfort, lastfero, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride (Erotic)",   0 )
5887GAME( 1994, lastfortk,lastfort, lastfort, lastfero, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride (Korea)",    0 )
5888GAME( 1994, lastfortg,lastfort, lastforg, ladykill, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride (German)",   0 )
5889GAME( 1994, toride2g, 0,        toride2g, toride2g, metro,    ROT0,   "Metro",                                  "Toride II Adauchi Gaiden",          GAME_IMPERFECT_GRAPHICS )
5890GAME( 1994, toride2gg,toride2g, toride2g, toride2g, metro,    ROT0,   "Metro",                                  "Toride II Adauchi Gaiden (German)", GAME_IMPERFECT_GRAPHICS )
5891GAME( 1994, toride2j, toride2g, toride2g, toride2g, metro,    ROT0,   "Metro",                                  "Toride II (Japan)",                 GAME_IMPERFECT_GRAPHICS )
5892GAME( 1994, gunmast,  0,        pururun,  gunmast,  daitorid, ROT0,   "Metro",                                  "Gun Master",                        0 )
5893GAME( 1995, daitorid, 0,        daitorid, daitorid, daitorid, ROT0,   "Metro",                                  "Daitoride",                         GAME_IMPERFECT_GRAPHICS )
5894GAME( 1996, daitoa,   daitorid, daitoa,   daitorid, balcube,  ROT0,   "Metro",                                  "Daitoride (YMF278B version)",                          0 )
5895GAME( 1995, dokyusei, 0,        dokyusei, dokyusei, gakusai,  ROT0,   "Make Software / Elf / Media Trading",    "Mahjong Doukyuusei",                0 )
5896GAME( 1995, dokyusp,  0,        dokyusp,  gakusai,  gakusai,  ROT0,   "Make Software / Elf / Media Trading",    "Mahjong Doukyuusei Special",        0 )
5897GAME( 1995, pururun,  0,        pururun,  pururun,  daitorid, ROT0,   "Metro / Banpresto",                      "Pururun",                           0 )
5898GAME( 1995, puzzli,   0,        daitorid, puzzli,   daitorid, ROT0,   "Metro / Banpresto",                      "Puzzli",                            GAME_IMPERFECT_GRAPHICS )
5899GAME( 1996, 3kokushi, 0,        3kokushi, 3kokushi, karatour, ROT0,   "Mitchell",                               "Sankokushi (Japan)",                GAME_IMPERFECT_GRAPHICS )
5900GAME( 1996, balcube,  0,        balcube,  balcube,  balcube,  ROT0,   "Metro",                                  "Bal Cube",                          0 )
5901GAME( 1996, bangball, 0,        bangball, bangball, balcube,  ROT0,   "Banpresto / Kunihiko Tashiro+Goodhouse", "Bang Bang Ball (v1.05)",            0 )
5902GAME( 1996, gstrik2,  0,        gstrik2,  gstrik2,  blzntrnd, ROT0,   "Human Amusement",                        "Grand Striker 2 (Japan)",           GAME_IMPERFECT_GRAPHICS ) // priority between rounds
5903GAME( 1996, gstrik2e, gstrik2,  gstrik2,  gstrik2,  blzntrnd, ROT0,   "Human Amusement",                        "Grand Striker 2 (Europe and Oceania)", GAME_IMPERFECT_GRAPHICS )
5904GAME( 1999, batlbubl, bangball, batlbubl, batlbubl, balcube,  ROT0,   "Limenko",                                "Battle Bubble (v2.00)",             0 )
5905GAME( 1996, mouja,    0,        mouja,    mouja,    mouja,    ROT0,   "Etona",                                  "Mouja (Japan)",                     GAME_NO_COCKTAIL )
5906GAME( 1997, gakusai,  0,        gakusai,  gakusai,  gakusai,  ROT0,   "MakeSoft",                               "Mahjong Gakuensai (Japan)",         GAME_IMPERFECT_GRAPHICS )
5907GAME( 1998, gakusai2, 0,        gakusai2, gakusai,  gakusai,  ROT0,   "MakeSoft",                               "Mahjong Gakuensai 2 (Japan)",       0 )
5908GAME( 2000, puzzlet,  0,        puzzlet,  puzzlet,  puzzlet,  ROT0,   "Unies Corporation",                      "Puzzlet (Japan)",                   GAME_NOT_WORKING | GAME_NO_SOUND )
6245GAME( 1992, karatour,  0,        karatour, karatour, karatour, ROT0,   "Mitchell",                               "The Karate Tournament",             GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6246GAME( 1992, pangpoms,  0,        pangpoms, pangpoms, metro,    ROT0,   "Metro",                                  "Pang Pom's",                        GAME_SUPPORTS_SAVE )
6247GAME( 1992, pangpomsm, pangpoms, pangpoms, pangpoms, metro,    ROT0,   "Metro (Mitchell license)",               "Pang Pom's (Mitchell)",             GAME_SUPPORTS_SAVE )
6248GAME( 1992, skyalert,  0,        skyalert, skyalert, metro,    ROT270, "Metro",                                  "Sky Alert",                         GAME_SUPPORTS_SAVE )
6249GAME( 1993, ladykill,  0,        karatour, ladykill, karatour, ROT90,  "Yanyaka (Mitchell license)",             "Lady Killer",                       GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6250GAME( 1993, moegonta,  ladykill, karatour, moegonta, karatour, ROT90,  "Yanyaka",                                "Moeyo Gonta!! (Japan)",             GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6251GAME( 1993, poitto,    0,        poitto,   poitto,   metro,    ROT0,   "Metro / Able Corp.",                     "Poitto!",                           GAME_SUPPORTS_SAVE )
6252GAME( 1994, blzntrnd,  0,        blzntrnd, blzntrnd, blzntrnd, ROT0,   "Human Amusement",                        "Blazing Tornado",                   GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6253GAME( 1994, dharma,    0,        dharma,   dharma,   metro,    ROT0,   "Metro",                                  "Dharma Doujou",                     GAME_SUPPORTS_SAVE )
6254GAME( 1994, dharmak,   dharma,   dharma,   dharma,   dharmak,  ROT0,   "Metro",                                  "Dharma Doujou (Korea)",             GAME_SUPPORTS_SAVE )
6255GAME( 1994, lastfort,  0,        lastfort, lastfort, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride",            GAME_SUPPORTS_SAVE )
6256GAME( 1994, lastforte, lastfort, lastfort, lastfero, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride (Erotic)",   GAME_SUPPORTS_SAVE )
6257GAME( 1994, lastfortk, lastfort, lastfort, lastfero, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride (Korea)",    GAME_SUPPORTS_SAVE )
6258GAME( 1994, lastfortg, lastfort, lastforg, ladykill, metro,    ROT0,   "Metro",                                  "Last Fortress - Toride (German)",   GAME_SUPPORTS_SAVE )
6259GAME( 1994, toride2g,  0,        toride2g, toride2g, metro,    ROT0,   "Metro",                                  "Toride II Adauchi Gaiden",          GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6260GAME( 1994, toride2gg, toride2g, toride2g, toride2g, metro,    ROT0,   "Metro",                                  "Toride II Adauchi Gaiden (German)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6261GAME( 1994, toride2j,  toride2g, toride2g, toride2g, metro,    ROT0,   "Metro",                                  "Toride II (Japan)",                 GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6262GAME( 1994, gunmast,   0,        pururun,  gunmast,  daitorid, ROT0,   "Metro",                                  "Gun Master",                        GAME_SUPPORTS_SAVE )
6263GAME( 1995, daitorid,  0,        daitorid, daitorid, daitorid, ROT0,   "Metro",                                  "Daitoride",                         GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6264GAME( 1996, daitoa,    daitorid, daitoa,   daitorid, balcube,  ROT0,   "Metro",                                  "Daitoride (YMF278B version)",       GAME_SUPPORTS_SAVE )
6265GAME( 1995, dokyusei,  0,        dokyusei, dokyusei, gakusai,  ROT0,   "Make Software / Elf / Media Trading",    "Mahjong Doukyuusei",                GAME_SUPPORTS_SAVE )
6266GAME( 1995, dokyusp,   0,        dokyusp,  gakusai,  gakusai,  ROT0,   "Make Software / Elf / Media Trading",    "Mahjong Doukyuusei Special",        GAME_SUPPORTS_SAVE )
6267GAME( 1995, msgogo,    0,        msgogo,   msgogo,   balcube,  ROT0,   "Metro",                                  "Mouse Shooter GoGo",                GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6268GAME( 1995, pururun,   0,        pururun,  pururun,  daitorid, ROT0,   "Metro / Banpresto",                      "Pururun",                           GAME_SUPPORTS_SAVE )
6269GAME( 1995, puzzli,    0,        daitorid, puzzli,   daitorid, ROT0,   "Metro / Banpresto",                      "Puzzli",                            GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6270GAME( 1996, 3kokushi,  0,        3kokushi, 3kokushi, karatour, ROT0,   "Mitchell",                               "Sankokushi (Japan)",                GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6271GAME( 1996, balcube,   0,        balcube,  balcube,  balcube,  ROT0,   "Metro",                                  "Bal Cube",                          GAME_SUPPORTS_SAVE )
6272GAME( 1996, bangball,  0,        bangball, bangball, balcube,  ROT0,   "Banpresto / Kunihiko Tashiro+Goodhouse", "Bang Bang Ball (v1.05)",            GAME_SUPPORTS_SAVE )
6273GAME( 1996, gstrik2,   0,        gstrik2,  gstrik2,  blzntrnd, ROT0,   "Human Amusement",                        "Grand Striker 2 (Europe and Oceania)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6274GAME( 1996, gstrik2j,  gstrik2,  gstrik2,  gstrik2,  blzntrnd, ROT0,   "Human Amusement",                        "Grand Striker 2 (Japan)",           GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // priority between rounds
6275GAME( 1999, batlbubl,  bangball, batlbubl, batlbubl, balcube,  ROT0,   "Limenko",                                "Battle Bubble (v2.00)",             GAME_SUPPORTS_SAVE )
6276GAME( 1996, mouja,     0,        mouja,    mouja,    mouja,    ROT0,   "Etona",                                  "Mouja (Japan)",                     GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
6277GAME( 1997, gakusai,   0,        gakusai,  gakusai,  gakusai,  ROT0,   "MakeSoft",                               "Mahjong Gakuensai (Japan)",         GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
6278GAME( 1998, gakusai2,  0,        gakusai2, gakusai,  gakusai,  ROT0,   "MakeSoft",                               "Mahjong Gakuensai 2 (Japan)",       GAME_SUPPORTS_SAVE )
6279GAME( 2000, puzzlet,   0,        puzzlet,  puzzlet,  puzzlet,  ROT0,   "Unies Corporation",                      "Puzzlet (Japan)",                   GAME_NOT_WORKING | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
src/mame/drivers/namcos23.c
r7640r7641
111111*Angler King      Namco, 1999    System 23
112112Gunmen Wars       Namco, 1998    Super System 23
113113*Race On!         Namco, 1998    Super System 23
114500 GP            Namco, 1999    Super System 23
114500 GP            Namco, 1998    Super System 23
115115Final Furlong 2   Namco, 1999    Super System 23
116116*Guitar Jam       Namco, 1999    Super System 23
117117Crisis Zone       Namco, 2000    System 23 Evolution 2
r7640r7641
12041204static INT16 s23_c422_regs[0x10];
12051205static int s23_subcpu_running;
12061206
1207static UINT32 p3d_address, p3d_size;
1208
12071209static UINT16 nthword( const UINT32 *pSource, int offs )
12081210{
12091211   pSource += offs/2;
r7640r7641
12411243   bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
12421244   bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
12431245
1246   gfx_element *gfx = screen->machine->gfx[0];
1247   memset(gfx->dirty, 1, gfx->total_elements);
1248
12441249   tilemap_draw( bitmap, cliprect, bgtilemap, 0/*flags*/, 0/*priority*/ ); /* opaque */
12451250   return 0;
12461251}
r7640r7641
12831288static READ16_HANDLER(s23_c417_r)
12841289{
12851290   switch(offset) {
1286   case 0: return 0x8e | (video_screen_get_vblank(space->machine->primary_screen) ? 0x8000 : 0);
1291   case 0: return 0x8e | (video_screen_get_vblank(space->machine->primary_screen) ? 0x0000 : 0x8000);
12871292   case 1: return c417_adr;
12881293   case 4:
12891294      //      logerror("c417_r %04x = %04x (%08x, %08x)\n", c417_adr, c417_ram[c417_adr], cpu_get_pc(space->cpu), (unsigned int)cpu_get_reg(space->cpu, MIPS3_R31));
r7640r7641
15801585   }
15811586}
15821587
1583static READ32_HANDLER( gorgon_magic_r )
1584{
1585   return 0xffffffff;   // must be non-zero (rapidrvr @ 8000229C)
1586}
1587
15881588/*
15891589    Final Furlong has a bug: it forgets to halt the H8/3002 before it zeros out the shared RAM
15901590    which contains the H8's stack and other working set.  This crashes MAME due to the PC going
r7640r7641
16141614   return 0x00020002;
16151615}
16161616
1617static void p3d_packet(const address_space *space, UINT32 adr, UINT32 size)
1618{
1619   logerror("p3d dma %08x %08x [%08x]\n", adr, size, (unsigned int)cpu_get_reg(space->cpu, MIPS3_R31));
1620}
1621
1622static READ32_HANDLER( p3d_r )
1623{
1624   switch(offset) {
1625   case 0xa: return 1; // Busy flag
1626   }
1627
1628   logerror("p3d_r %02x @ %08x (%08x, %08x)\n", offset, mem_mask, cpu_get_pc(space->cpu), (unsigned int)cpu_get_reg(space->cpu, MIPS3_R31));
1629   return 0;
1630}
1631
1632static WRITE32_HANDLER( p3d_w)
1633{
1634   switch(offset) {
1635   case 0x7: COMBINE_DATA(&p3d_address); return;
1636   case 0x8: COMBINE_DATA(&p3d_size); return;
1637   case 0x9:
1638      if(data & 1)
1639         p3d_packet(space, p3d_address, p3d_size);
1640      return;
1641   case 0x17: return;
1642   }
1643   logerror("p3d_w %02x, %08x @ %08x (%08x, %08x)\n", offset, data, mem_mask, cpu_get_pc(space->cpu), (unsigned int)cpu_get_reg(space->cpu, MIPS3_R31));
1644}
1645
16171646static ADDRESS_MAP_START( gorgon_map, ADDRESS_SPACE_PROGRAM, 32 )
16181647   AM_RANGE(0x00000000, 0x003fffff) AM_RAM
1619   AM_RANGE(0x01000000, 0x010000ff) AM_READ( gorgon_magic_r )
1648   AM_RANGE(0x01000000, 0x010000ff) AM_READWRITE( p3d_r, p3d_w )
16201649   AM_RANGE(0x02000000, 0x0200000f) AM_READWRITE16( s23_c417_r, s23_c417_w, 0xffffffff )
16211650   AM_RANGE(0x04400000, 0x0440ffff) AM_READWRITE( gorgon_sharedram_r, gorgon_sharedram_w ) AM_BASE(&namcos23_shared_ram)
16221651
16231652   AM_RANGE(0x04c3ff08, 0x04c3ff0b) AM_WRITE( s23_mcuen_w )
1624   AM_RANGE(0x04c3ff0c, 0x04c3ff0f) AM_RAM            // 3d FIFO
1653   AM_RANGE(0x04c3ff0c, 0x04c3ff0f) AM_RAM
16251654
16261655   AM_RANGE(0x06080000, 0x06081fff) AM_RAM
16271656
r7640r7641
16471676
16481677static ADDRESS_MAP_START( ss23_map, ADDRESS_SPACE_PROGRAM, 32 )
16491678   AM_RANGE(0x00000000, 0x003fffff) AM_RAM
1650   AM_RANGE(0x01000000, 0x010000ff) AM_READ( gorgon_magic_r )
1679   AM_RANGE(0x01000000, 0x010000ff) AM_READWRITE( p3d_r, p3d_w )
16511680   AM_RANGE(0x02000000, 0x0200000f) AM_READWRITE16( s23_c417_r, s23_c417_w, 0xffffffff )
16521681   AM_RANGE(0x04400000, 0x0440ffff) AM_RAM AM_BASE(&namcos23_shared_ram)
16531682   AM_RANGE(0x04c3ff08, 0x04c3ff0b) AM_WRITE( s23_mcuen_w )
1654   AM_RANGE(0x04c3ff0c, 0x04c3ff0f) AM_RAM            // 3d FIFO
1683   AM_RANGE(0x04c3ff0c, 0x04c3ff0f) AM_RAM
16551684   AM_RANGE(0x06000000, 0x0600ffff) AM_RAM AM_BASE_SIZE_GENERIC(nvram) // Backup
16561685   AM_RANGE(0x06200000, 0x06203fff) AM_RAM                             // C422
16571686   AM_RANGE(0x06400000, 0x0640000f) AM_READWRITE16( s23_c422_r, s23_c422_w, 0xffffffff )   // C422 registers
r7640r7641
16591688   AM_RANGE(0x06804000, 0x0681dfff) AM_RAM
16601689   AM_RANGE(0x0681e000, 0x0681ffff) AM_RAM_WRITE( namcos23_textram_w ) AM_BASE(&namcos23_textram)
16611690   AM_RANGE(0x06820000, 0x0682000f) AM_READWRITE16( s23_c361_r, s23_c361_w, 0xffffffff )   // C361
1662   AM_RANGE(0x06a08000, 0x06a0ffff) AM_RAM   // GAMMA (C404)
1691   AM_RANGE(0x06a08000, 0x06a081ff) AM_RAM   // Blending control (C404 too?)
1692   AM_RANGE(0x06a08200, 0x06a087ff) AM_RAM   // GAMMA (C404)
16631693   AM_RANGE(0x06a10000, 0x06a3ffff) AM_RAM_WRITE( namcos23_paletteram_w ) AM_BASE_GENERIC(paletteram)
16641694   AM_RANGE(0x08000000, 0x08ffffff) AM_ROM AM_REGION("data", 0x0000000) AM_MIRROR(0x01000000)   // data ROMs
16651695   AM_RANGE(0x0a000000, 0x0affffff) AM_ROM AM_REGION("data", 0x1000000) AM_MIRROR(0x01000000)
r7640r7641
20162046   PORT_START("H8PORT")
20172047
20182048   // No idea if start is actually there, but we need buttons to pass error screens
2049   // You can go to the pcb test mode by pressing start, but it crashes...
20192050   PORT_START("P1")
2020   PORT_BIT( 0x001, IP_ACTIVE_LOW, IPT_START1 )
2021   PORT_BIT( 0xffe, IP_ACTIVE_LOW, IPT_UNKNOWN )
2051   PORT_BIT( 0x008, IP_ACTIVE_LOW, IPT_START1 )
2052   PORT_BIT( 0xff7, IP_ACTIVE_LOW, IPT_UNKNOWN )
20222053
20232054   PORT_START("P2")
2024   PORT_BIT( 0x001, IP_ACTIVE_LOW, IPT_START2 )
2025   PORT_BIT( 0xffe, IP_ACTIVE_LOW, IPT_UNKNOWN )
2055   PORT_BIT( 0xfff, IP_ACTIVE_LOW, IPT_START2 )
20262056
20272057   PORT_START("TC2P0")
20282058   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1 )
r7640r7641
22072237   if ((!strcmp(machine->gamedrv->name, "motoxgo")) ||
22082238       (!strcmp(machine->gamedrv->name, "panicprk")) ||
22092239       (!strcmp(machine->gamedrv->name, "rapidrvr")) ||
2240       (!strcmp(machine->gamedrv->name, "rapidrvr2")) ||
22102241       (!strcmp(machine->gamedrv->name, "finlflng")) ||
22112242       (!strcmp(machine->gamedrv->name, "gunwars")) ||
2243       (!strcmp(machine->gamedrv->name, "downhill")) ||
22122244       (!strcmp(machine->gamedrv->name, "finfurl2")) ||
22132245       (!strcmp(machine->gamedrv->name, "finfurl2j")) ||
2246       (!strcmp(machine->gamedrv->name, "crszone")) ||
22142247       (!strcmp(machine->gamedrv->name, "timecrs2b")) ||
22152248       (!strcmp(machine->gamedrv->name, "timecrs2")))
22162249   {
r7640r7641
23862419   MDRV_CPU_IO_MAP( s23iobrdiomap )
23872420MACHINE_DRIVER_END
23882421
2422static MACHINE_DRIVER_START( ss23e2 )
2423   MDRV_IMPORT_FROM( ss23 )
2424
2425   MDRV_CPU_REPLACE("maincpu", R4650BE, S23_BUSCLOCK*6)
2426
2427   MDRV_CPU_MODIFY("audiocpu")
2428   MDRV_CPU_IO_MAP( s23h8iomap )
2429
2430   MDRV_CPU_ADD("ioboard", H83334, 14745600 )
2431   MDRV_CPU_PROGRAM_MAP( s23iobrdmap )
2432   MDRV_CPU_IO_MAP( s23iobrdiomap )
2433MACHINE_DRIVER_END
2434
23892435static MACHINE_DRIVER_START( gmen )
23902436   MDRV_IMPORT_FROM( s23 )
23912437
r7640r7641
24002446
24012447ROM_START( rapidrvr )
24022448   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2403        ROM_LOAD16_BYTE( "rd3verc.ic2",  0x000000, 0x200000, CRC(c15c0f30) SHA1(9f529232818f3e184f81f62408a5cad615b05613) )
2404        ROM_LOAD16_BYTE( "rd3verc.ic1",  0x000001, 0x200000, CRC(9d7f4411) SHA1(d049efaa539d36ed0f73ca3f50a8f7112e67f865) )
2449   ROM_LOAD16_BYTE( "rd3verc.ic2",  0x000000, 0x200000, CRC(c15c0f30) SHA1(9f529232818f3e184f81f62408a5cad615b05613) )
2450   ROM_LOAD16_BYTE( "rd3verc.ic1",  0x000001, 0x200000, CRC(9d7f4411) SHA1(d049efaa539d36ed0f73ca3f50a8f7112e67f865) )
24052451
24062452   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
24072453   ROM_LOAD16_WORD_SWAP( "rd3verc.ic3",  0x000000, 0x080000, CRC(6e26fbaf) SHA1(4ab6637d22f0d26f7e1d10e9c80059c56f64303d) )
24082454
24092455   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
2410        ROM_LOAD( "asca1_io-a.ic2", 0x000000, 0x040000, CRC(77cdf69a) SHA1(497af1059f85c07bea2dd0d303481623f6019dcf) )
2456   ROM_LOAD( "asca1_io-a.ic2", 0x000000, 0x040000, CRC(77cdf69a) SHA1(497af1059f85c07bea2dd0d303481623f6019dcf) )
24112457
24122458   ROM_REGION32_BE( 0x800000, "data", 0 )   /* data */
2413        ROM_LOAD16_BYTE( "rd1mtah.3j",   0x000000, 0x400000, CRC(d8fa0f3d) SHA1(0d5bdb3a2e7be1dffe11b74baa2c10bfe011ae92) )
2414        ROM_LOAD16_BYTE( "rd1mtal.1j",   0x000001, 0x400000, CRC(8f0efa86) SHA1(9953461c258f2a96be275a7b18d6518ddfac3860) )
2459   ROM_LOAD16_BYTE( "rd1mtah.3j",   0x000000, 0x400000, CRC(d8fa0f3d) SHA1(0d5bdb3a2e7be1dffe11b74baa2c10bfe011ae92) )
2460   ROM_LOAD16_BYTE( "rd1mtal.1j",   0x000001, 0x400000, CRC(8f0efa86) SHA1(9953461c258f2a96be275a7b18d6518ddfac3860) )
24152461
24162462   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2417        ROM_LOAD( "rd1cguu.5b",   0x0000000, 0x800000, CRC(611bab41) SHA1(84cddb2b63bf8336e92aecb06eddf1b34af73540) )
2418        ROM_LOAD( "rd1cgum.6b",   0x0800000, 0x800000, CRC(c50de2ef) SHA1(24758a72b3569ce6a643a5786fce7c34b8aa692d) )
2419        ROM_LOAD( "rd1cgll.8b",   0x1000000, 0x800000, CRC(b58b92ac) SHA1(70ee6e0e5347e05817aa30d53d766b8ce0fc44e4) )
2420        ROM_LOAD( "rd1cglm.7b",   0x1800000, 0x800000, CRC(447067fa) SHA1(e2052373773594feb303e1924a4a820cf34ab55b) )
2463   ROM_LOAD( "rd1cgll.8b",   0x0000000, 0x800000, CRC(b58b92ac) SHA1(70ee6e0e5347e05817aa30d53d766b8ce0fc44e4) )
2464   ROM_LOAD( "rd1cglm.7b",   0x0800000, 0x800000, CRC(447067fa) SHA1(e2052373773594feb303e1924a4a820cf34ab55b) )
2465   ROM_LOAD( "rd1cgum.6b",   0x1000000, 0x800000, CRC(c50de2ef) SHA1(24758a72b3569ce6a643a5786fce7c34b8aa692d) )
2466   ROM_LOAD( "rd1cguu.5b",   0x1800000, 0x800000, CRC(611bab41) SHA1(84cddb2b63bf8336e92aecb06eddf1b34af73540) )
24212467
2422   ROM_REGION( 0x2000000, "textile2", 0 )   /* texture tiles bank 2? */
2423        ROM_LOAD( "rd1spruu.9p",  0x0000000, 0x400000, CRC(f20a9673) SHA1(e5f1d552b0c42e102593ab578ff0b9ff814f8650) )
2424        ROM_LOAD( "rd1sprum.10p", 0x0800000, 0x400000, CRC(8e08b2c6) SHA1(a17331a4e41f677f604d1b74e7694cf920b03b66) )
2425        ROM_LOAD( "rd1sprll.12t", 0x1000000, 0x400000, CRC(8d450259) SHA1(27cccd1e7dad8880147bb85185982d8d27076e69) )
2426        ROM_LOAD( "rd1sprlm.11p", 0x1800000, 0x400000, CRC(6c8db3a5) SHA1(24d81fa11e9c835cddadec4cbd530738e258346c) )
2468   ROM_REGION( 0x1000000, "sprites", 0 )   /* sprites tiles */
2469   ROM_LOAD( "rd1sprll.12t", 0x0000000, 0x400000, CRC(8d450259) SHA1(27cccd1e7dad8880147bb85185982d8d27076e69) )
2470   ROM_LOAD( "rd1sprlm.11p", 0x0400000, 0x400000, CRC(6c8db3a5) SHA1(24d81fa11e9c835cddadec4cbd530738e258346c) )
2471   ROM_LOAD( "rd1sprum.10p", 0x0800000, 0x400000, CRC(8e08b2c6) SHA1(a17331a4e41f677f604d1b74e7694cf920b03b66) )
2472   ROM_LOAD( "rd1spruu.9p",  0x0c00000, 0x400000, CRC(f20a9673) SHA1(e5f1d552b0c42e102593ab578ff0b9ff814f8650) )
24272473
2428   ROM_REGION( 0x2000000, "textiledup", 0 )   /* duplicate bank of texture tiles */
2429        ROM_LOAD( "rd1cguu.5f",   0x0800000, 0x800000, CRC(611bab41) SHA1(84cddb2b63bf8336e92aecb06eddf1b34af73540) )
2430        ROM_LOAD( "rd1cgum.6f",   0x1800000, 0x800000, CRC(c50de2ef) SHA1(24758a72b3569ce6a643a5786fce7c34b8aa692d) )
2431        ROM_LOAD( "rd1cgll.8f",   0x1000000, 0x800000, CRC(b58b92ac) SHA1(70ee6e0e5347e05817aa30d53d766b8ce0fc44e4) )
2432        ROM_LOAD( "rd1cglm.7f",   0x0000000, 0x800000, CRC(447067fa) SHA1(e2052373773594feb303e1924a4a820cf34ab55b) )
2474   ROM_REGION16_LE( 0x200000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2475   ROM_LOAD( "rd1ccrl.11a",  0x000000, 0x200000, CRC(b0ea2b32) SHA1(0dc45846725b0de619bc6bae69e3eb166ed21bf0) )
24332476
2434   ROM_REGION( 0x2000000, "textile2d", 0 )   /* duplicate of texture tiles bank 2? */
2435        ROM_LOAD( "rd1spruu.9t",  0x0000000, 0x400000, CRC(f20a9673) SHA1(e5f1d552b0c42e102593ab578ff0b9ff814f8650) )
2436        ROM_LOAD( "rd1sprum.10t", 0x0800000, 0x400000, CRC(8e08b2c6) SHA1(a17331a4e41f677f604d1b74e7694cf920b03b66) )
2437        ROM_LOAD( "rd1sprll.12p", 0x1000000, 0x400000, CRC(8d450259) SHA1(27cccd1e7dad8880147bb85185982d8d27076e69) )
2438        ROM_LOAD( "rd1sprlm.11t", 0x1800000, 0x400000, CRC(6c8db3a5) SHA1(24d81fa11e9c835cddadec4cbd530738e258346c) )
2477   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2478   ROM_LOAD( "rd1ccrh.11b",  0x000000, 0x200000, CRC(fafffb86) SHA1(15b0ba0252b99d0cac29fcb374fb895643f528fe) )
24392479
2440   ROM_REGION( 0x400000, "textilemap", 0 )   /* texture tilemap */
2441        ROM_LOAD( "rd1ccrl.11a",  0x000000, 0x200000, CRC(b0ea2b32) SHA1(0dc45846725b0de619bc6bae69e3eb166ed21bf0) )
2442        ROM_LOAD( "rd1ccrh.11b",  0x200000, 0x200000, CRC(fafffb86) SHA1(15b0ba0252b99d0cac29fcb374fb895643f528fe) )
2480   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2481   ROM_LOAD32_WORD_SWAP( "rd1pt0h.9l",   0x0000000, 0x400000, CRC(6f280eff) SHA1(9dd8c8903581d7a412146e50f4009e1d2b743f06) )
2482   ROM_LOAD32_WORD_SWAP( "rd1pt0l.9j",   0x0000002, 0x400000, CRC(47b1c5a5) SHA1(021d4ca7b8674d8ed5daa701bf41b4a7164d992a) )
2483   ROM_LOAD32_WORD_SWAP( "rd1pt1h.10l",  0x0800000, 0x400000, CRC(37bd9bdf) SHA1(b26c284024ea4ad4c67b2eefbfdd5ebb35a0118e) )
2484   ROM_LOAD32_WORD_SWAP( "rd1pt1l.10j",  0x0800002, 0x400000, CRC(91131cb3) SHA1(e42c5e190c719f1cf2d6e91444062ab901be0e73) )
2485   ROM_LOAD32_WORD_SWAP( "rd1pt2h.11l",  0x1000000, 0x400000, CRC(fa601e83) SHA1(45c420538910f566e75d668306735f54c901669f) )
2486   ROM_LOAD32_WORD_SWAP( "rd1pt2l.11j",  0x1000002, 0x400000, CRC(3423ff9f) SHA1(73823c179c866cbb601a23417acbbf5b3dc97213) )
2487   ROM_LOAD32_WORD_SWAP( "rd1pt3h.12l",  0x1800000, 0x400000, CRC(e82ff66a) SHA1(9e2c951136b26d969d2c9d030b7e0bad8bbbe3fb) )
2488   ROM_LOAD32_WORD_SWAP( "rd1pt3l.12j",  0x1800002, 0x400000, CRC(7216d63e) SHA1(77088ff05c2630996f4bdc87fe466f9b97611467) )
24432489
2444   ROM_REGION( 0x400000, "textilemp2", 0 )   /* duplicate texture tilemap */
2445        ROM_LOAD( "rd1ccrl.11e",  0x000000, 0x200000, CRC(b0ea2b32) SHA1(0dc45846725b0de619bc6bae69e3eb166ed21bf0) )
2446        ROM_LOAD( "rd1ccrh.11f",  0x200000, 0x200000, CRC(fafffb86) SHA1(15b0ba0252b99d0cac29fcb374fb895643f528fe) )
2490   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2491   ROM_LOAD( "rd1wavel.2s",  0x000000, 0x800000, CRC(bf52c08c) SHA1(6745062e078e520484390fad1f723124aa4076d0) )
2492   ROM_LOAD( "rd1waveh.3s",  0x800000, 0x800000, CRC(ef0136b5) SHA1(a6d923ededca168fe555e0b86a72f53bec5424cc) )
24472493
2448   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2449        ROM_LOAD32_WORD( "rd1pt0l.9j",   0x0000000, 0x400000, CRC(47b1c5a5) SHA1(021d4ca7b8674d8ed5daa701bf41b4a7164d992a) )
2450        ROM_LOAD32_WORD( "rd1pt0h.9l",   0x0000002, 0x400000, CRC(6f280eff) SHA1(9dd8c8903581d7a412146e50f4009e1d2b743f06) )
2451        ROM_LOAD32_WORD( "rd1pt1l.10j",  0x0800000, 0x400000, CRC(91131cb3) SHA1(e42c5e190c719f1cf2d6e91444062ab901be0e73) )
2452        ROM_LOAD32_WORD( "rd1pt1h.10l",  0x0800002, 0x400000, CRC(37bd9bdf) SHA1(b26c284024ea4ad4c67b2eefbfdd5ebb35a0118e) )
2453        ROM_LOAD32_WORD( "rd1pt2l.11j",  0x1000000, 0x400000, CRC(3423ff9f) SHA1(73823c179c866cbb601a23417acbbf5b3dc97213) )
2454        ROM_LOAD32_WORD( "rd1pt2h.11l",  0x1000002, 0x400000, CRC(fa601e83) SHA1(45c420538910f566e75d668306735f54c901669f) )
2455        ROM_LOAD32_WORD( "rd1pt3l.12j",  0x1800000, 0x400000, CRC(7216d63e) SHA1(77088ff05c2630996f4bdc87fe466f9b97611467) )
2456        ROM_LOAD32_WORD( "rd1pt3h.12l",  0x1800002, 0x400000, CRC(e82ff66a) SHA1(9e2c951136b26d969d2c9d030b7e0bad8bbbe3fb) )
2494   ROM_REGION( 0x800000, "dups", 0 )   /* duplicate roms */
2495   ROM_LOAD( "rd1cgll.8f",   0x000000, 0x800000, CRC(b58b92ac) SHA1(70ee6e0e5347e05817aa30d53d766b8ce0fc44e4) )
2496   ROM_LOAD( "rd1cglm.7f",   0x000000, 0x800000, CRC(447067fa) SHA1(e2052373773594feb303e1924a4a820cf34ab55b) )
2497   ROM_LOAD( "rd1cgum.6f",   0x000000, 0x800000, CRC(c50de2ef) SHA1(24758a72b3569ce6a643a5786fce7c34b8aa692d) )
2498   ROM_LOAD( "rd1cguu.5f",   0x000000, 0x800000, CRC(611bab41) SHA1(84cddb2b63bf8336e92aecb06eddf1b34af73540) )
2499   ROM_LOAD( "rd1sprll.12p", 0x000000, 0x400000, CRC(8d450259) SHA1(27cccd1e7dad8880147bb85185982d8d27076e69) )
2500   ROM_LOAD( "rd1sprlm.11t", 0x000000, 0x400000, CRC(6c8db3a5) SHA1(24d81fa11e9c835cddadec4cbd530738e258346c) )
2501   ROM_LOAD( "rd1sprum.10t", 0x000000, 0x400000, CRC(8e08b2c6) SHA1(a17331a4e41f677f604d1b74e7694cf920b03b66) )
2502   ROM_LOAD( "rd1spruu.9t",  0x000000, 0x400000, CRC(f20a9673) SHA1(e5f1d552b0c42e102593ab578ff0b9ff814f8650) )
2503   ROM_LOAD( "rd1ccrl.11e",  0x000000, 0x200000, CRC(b0ea2b32) SHA1(0dc45846725b0de619bc6bae69e3eb166ed21bf0) )
2504   ROM_LOAD( "rd1ccrh.11f",  0x000000, 0x200000, CRC(fafffb86) SHA1(15b0ba0252b99d0cac29fcb374fb895643f528fe) )
2505ROM_END
24572506
2507ROM_START( rapidrvr2 )
2508   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2509   ROM_LOAD16_BYTE( "rd2verc.ic2",  0x000000, 0x200000, CRC(234fc2f4) SHA1(64374f4de19855f1980d8e088049b0c112107f43) )
2510   ROM_LOAD16_BYTE( "rd2verc.ic1",  0x000001, 0x200000, CRC(651c5da4) SHA1(0e73e2cfafda626597d2ce08bf07458509fb79de) )
2511
2512   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2513   ROM_LOAD16_WORD_SWAP( "rd2verc.ic3",  0x000000, 0x080000, CRC(6e26fbaf) SHA1(4ab6637d22f0d26f7e1d10e9c80059c56f64303d) )
2514
2515   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
2516   ROM_LOAD( "asca1_io-a.ic2", 0x000000, 0x040000, CRC(77cdf69a) SHA1(497af1059f85c07bea2dd0d303481623f6019dcf) )
2517
2518   ROM_REGION32_BE( 0x800000, "data", 0 )   /* data */
2519   ROM_LOAD16_BYTE( "rd1mtah.3j",   0x000000, 0x400000, CRC(d8fa0f3d) SHA1(0d5bdb3a2e7be1dffe11b74baa2c10bfe011ae92) )
2520   ROM_LOAD16_BYTE( "rd1mtal.1j",   0x000001, 0x400000, CRC(8f0efa86) SHA1(9953461c258f2a96be275a7b18d6518ddfac3860) )
2521
2522   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2523   ROM_LOAD( "rd1cgll.8b",   0x0000000, 0x800000, CRC(b58b92ac) SHA1(70ee6e0e5347e05817aa30d53d766b8ce0fc44e4) )
2524   ROM_LOAD( "rd1cglm.7b",   0x0800000, 0x800000, CRC(447067fa) SHA1(e2052373773594feb303e1924a4a820cf34ab55b) )
2525   ROM_LOAD( "rd1cgum.6b",   0x1000000, 0x800000, CRC(c50de2ef) SHA1(24758a72b3569ce6a643a5786fce7c34b8aa692d) )
2526   ROM_LOAD( "rd1cguu.5b",   0x1800000, 0x800000, CRC(611bab41) SHA1(84cddb2b63bf8336e92aecb06eddf1b34af73540) )
2527
2528   ROM_REGION( 0x1000000, "sprites", 0 )   /* sprites tiles */
2529   ROM_LOAD( "rd1sprll.12t", 0x0000000, 0x400000, CRC(8d450259) SHA1(27cccd1e7dad8880147bb85185982d8d27076e69) )
2530   ROM_LOAD( "rd1sprlm.11p", 0x0400000, 0x400000, CRC(6c8db3a5) SHA1(24d81fa11e9c835cddadec4cbd530738e258346c) )
2531   ROM_LOAD( "rd1sprum.10p", 0x0800000, 0x400000, CRC(8e08b2c6) SHA1(a17331a4e41f677f604d1b74e7694cf920b03b66) )
2532   ROM_LOAD( "rd1spruu.9p",  0x0c00000, 0x400000, CRC(f20a9673) SHA1(e5f1d552b0c42e102593ab578ff0b9ff814f8650) )
2533
2534   ROM_REGION16_LE( 0x200000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2535   ROM_LOAD( "rd1ccrl.11a",  0x000000, 0x200000, CRC(b0ea2b32) SHA1(0dc45846725b0de619bc6bae69e3eb166ed21bf0) )
2536
2537   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2538   ROM_LOAD( "rd1ccrh.11b",  0x000000, 0x200000, CRC(fafffb86) SHA1(15b0ba0252b99d0cac29fcb374fb895643f528fe) )
2539
2540   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2541   ROM_LOAD32_WORD_SWAP( "rd1pt0h.9l",   0x0000000, 0x400000, CRC(6f280eff) SHA1(9dd8c8903581d7a412146e50f4009e1d2b743f06) )
2542   ROM_LOAD32_WORD_SWAP( "rd1pt0l.9j",   0x0000002, 0x400000, CRC(47b1c5a5) SHA1(021d4ca7b8674d8ed5daa701bf41b4a7164d992a) )
2543   ROM_LOAD32_WORD_SWAP( "rd1pt1h.10l",  0x0800000, 0x400000, CRC(37bd9bdf) SHA1(b26c284024ea4ad4c67b2eefbfdd5ebb35a0118e) )
2544   ROM_LOAD32_WORD_SWAP( "rd1pt1l.10j",  0x0800002, 0x400000, CRC(91131cb3) SHA1(e42c5e190c719f1cf2d6e91444062ab901be0e73) )
2545   ROM_LOAD32_WORD_SWAP( "rd1pt2h.11l",  0x1000000, 0x400000, CRC(fa601e83) SHA1(45c420538910f566e75d668306735f54c901669f) )
2546   ROM_LOAD32_WORD_SWAP( "rd1pt2l.11j",  0x1000002, 0x400000, CRC(3423ff9f) SHA1(73823c179c866cbb601a23417acbbf5b3dc97213) )
2547   ROM_LOAD32_WORD_SWAP( "rd1pt3h.12l",  0x1800000, 0x400000, CRC(e82ff66a) SHA1(9e2c951136b26d969d2c9d030b7e0bad8bbbe3fb) )
2548   ROM_LOAD32_WORD_SWAP( "rd1pt3l.12j",  0x1800002, 0x400000, CRC(7216d63e) SHA1(77088ff05c2630996f4bdc87fe466f9b97611467) )
2549
24582550   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2459        ROM_LOAD( "rd1wavel.2s",  0x000000, 0x800000, CRC(bf52c08c) SHA1(6745062e078e520484390fad1f723124aa4076d0) )
2460        ROM_LOAD( "rd1waveh.3s",  0x800000, 0x800000, CRC(ef0136b5) SHA1(a6d923ededca168fe555e0b86a72f53bec5424cc) )
2551   ROM_LOAD( "rd1wavel.2s",  0x000000, 0x800000, CRC(bf52c08c) SHA1(6745062e078e520484390fad1f723124aa4076d0) )
2552   ROM_LOAD( "rd1waveh.3s",  0x800000, 0x800000, CRC(ef0136b5) SHA1(a6d923ededca168fe555e0b86a72f53bec5424cc) )
2553
2554   ROM_REGION( 0x800000, "dups", 0 )   /* duplicate roms */
2555   ROM_LOAD( "rd1cgll.8f",   0x000000, 0x800000, CRC(b58b92ac) SHA1(70ee6e0e5347e05817aa30d53d766b8ce0fc44e4) )
2556   ROM_LOAD( "rd1cglm.7f",   0x000000, 0x800000, CRC(447067fa) SHA1(e2052373773594feb303e1924a4a820cf34ab55b) )
2557   ROM_LOAD( "rd1cgum.6f",   0x000000, 0x800000, CRC(c50de2ef) SHA1(24758a72b3569ce6a643a5786fce7c34b8aa692d) )
2558   ROM_LOAD( "rd1cguu.5f",   0x000000, 0x800000, CRC(611bab41) SHA1(84cddb2b63bf8336e92aecb06eddf1b34af73540) )
2559   ROM_LOAD( "rd1sprll.12p", 0x000000, 0x400000, CRC(8d450259) SHA1(27cccd1e7dad8880147bb85185982d8d27076e69) )
2560   ROM_LOAD( "rd1sprlm.11t", 0x000000, 0x400000, CRC(6c8db3a5) SHA1(24d81fa11e9c835cddadec4cbd530738e258346c) )
2561   ROM_LOAD( "rd1sprum.10t", 0x000000, 0x400000, CRC(8e08b2c6) SHA1(a17331a4e41f677f604d1b74e7694cf920b03b66) )
2562   ROM_LOAD( "rd1spruu.9t",  0x000000, 0x400000, CRC(f20a9673) SHA1(e5f1d552b0c42e102593ab578ff0b9ff814f8650) )
2563   ROM_LOAD( "rd1ccrl.11e",  0x000000, 0x200000, CRC(b0ea2b32) SHA1(0dc45846725b0de619bc6bae69e3eb166ed21bf0) )
2564   ROM_LOAD( "rd1ccrh.11f",  0x000000, 0x200000, CRC(fafffb86) SHA1(15b0ba0252b99d0cac29fcb374fb895643f528fe) )
24612565ROM_END
24622566
24632567ROM_START( finlflng )
24642568   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2465        ROM_LOAD16_BYTE( "ff2vera.ic2",  0x000000, 0x200000, CRC(e10f9dfa) SHA1(6f6989cd722fec5e3ed3ad1bb4866c5831041ae1) )
2466        ROM_LOAD16_BYTE( "ff2vera.ic1",  0x000001, 0x200000, CRC(5a90ffbf) SHA1(e22dc0ae2d3c3b3a521369fe3f63412ae2ae0a12) )
2569   ROM_LOAD16_BYTE( "ff2vera.ic2",  0x000000, 0x200000, CRC(e10f9dfa) SHA1(6f6989cd722fec5e3ed3ad1bb4866c5831041ae1) )
2570   ROM_LOAD16_BYTE( "ff2vera.ic1",  0x000001, 0x200000, CRC(5a90ffbf) SHA1(e22dc0ae2d3c3b3a521369fe3f63412ae2ae0a12) )
24672571
24682572   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2469        ROM_LOAD16_WORD_SWAP( "ff2vera.ic3",  0x000000, 0x080000, CRC(ab681078) SHA1(ec8367404458a54893ab6bea29c8a2ba3272b816) )
2573   ROM_LOAD16_WORD_SWAP( "ff2vera.ic3",  0x000000, 0x080000, CRC(ab681078) SHA1(ec8367404458a54893ab6bea29c8a2ba3272b816) )
24702574
24712575   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
2472        ROM_LOAD( "asca1_io-a.ic2", 0x000000, 0x040000, CRC(77cdf69a) SHA1(497af1059f85c07bea2dd0d303481623f6019dcf) )
2576   ROM_LOAD( "asca1_io-a.ic2", 0x000000, 0x040000, CRC(77cdf69a) SHA1(497af1059f85c07bea2dd0d303481623f6019dcf) )
24732577
24742578   ROM_REGION32_BE( 0x800000, "data", 0 )   /* data */
2475        ROM_LOAD16_BYTE( "ff2mtah.3j",   0x000000, 0x400000, CRC(161003cd) SHA1(04409333a4776b17700fc6d1aa06a39560132e03) )
2476        ROM_LOAD16_BYTE( "ff2mtal.1j",   0x000001, 0x400000, CRC(ed1a5bf2) SHA1(bd05388a125a0201a41af95fb2aa5fe1c8b0f270) )
2579   ROM_LOAD16_BYTE( "ff2mtah.3j",   0x000000, 0x400000, CRC(161003cd) SHA1(04409333a4776b17700fc6d1aa06a39560132e03) )
2580   ROM_LOAD16_BYTE( "ff2mtal.1j",   0x000001, 0x400000, CRC(ed1a5bf2) SHA1(bd05388a125a0201a41af95fb2aa5fe1c8b0f270) )
24772581
2478   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2479        ROM_LOAD( "ff2cguu.5b",   0x0000000, 0x400000, CRC(595deee4) SHA1(b29ff9c6ba17737f1f87c05b2d899d80b0b72dbb) )
2480        ROM_LOAD( "ff2cgum.6b",   0x0800000, 0x400000, CRC(b808be59) SHA1(906bfbb5d34feef9697da545a93930fe6e56685c) )
2481        ROM_LOAD( "ff2cgll.8b",   0x1000000, 0x400000, CRC(8e6c34eb) SHA1(795631c8019011246ed1e5546de4433dc22dd9e7) )
2482        ROM_LOAD( "ff2cglm.7b",   0x1800000, 0x400000, CRC(406f321b) SHA1(41a2b0229d5370f141b9d6a4e1801e2f9973f660) )
2582   ROM_REGION( 0x1000000, "textile", 0 )   /* texture tiles */
2583   ROM_LOAD( "ff2cgll.8b",   0x0000000, 0x400000, CRC(8e6c34eb) SHA1(795631c8019011246ed1e5546de4433dc22dd9e7) )
2584   ROM_LOAD( "ff2cglm.7b",   0x0400000, 0x400000, CRC(406f321b) SHA1(41a2b0229d5370f141b9d6a4e1801e2f9973f660) )
2585   ROM_LOAD( "ff2cgum.6b",   0x0800000, 0x400000, CRC(b808be59) SHA1(906bfbb5d34feef9697da545a93930fe6e56685c) )
2586   ROM_LOAD( "ff2cguu.5b",   0x0c00000, 0x400000, CRC(595deee4) SHA1(b29ff9c6ba17737f1f87c05b2d899d80b0b72dbb) )
24832587
2484   ROM_REGION( 0x2000000, "textiledup", 0 )   /* duplicate bank of texture tiles */
2485        ROM_LOAD( "ff2cguu.5f",   0x0000000, 0x400000, CRC(595deee4) SHA1(b29ff9c6ba17737f1f87c05b2d899d80b0b72dbb) )
2486        ROM_LOAD( "ff2cgum.6f",   0x0800000, 0x400000, CRC(b808be59) SHA1(906bfbb5d34feef9697da545a93930fe6e56685c) )
2487        ROM_LOAD( "ff2cgll.8f",   0x1000000, 0x400000, CRC(8e6c34eb) SHA1(795631c8019011246ed1e5546de4433dc22dd9e7) )
2488        ROM_LOAD( "ff2cglm.7f",   0x1800000, 0x400000, CRC(406f321b) SHA1(41a2b0229d5370f141b9d6a4e1801e2f9973f660) )
2588   ROM_REGION( 0x1000000, "sprites", 0 )   /* texture tiles bank 2? */
2589   ROM_LOAD( "ff2sprll.12t", 0x0000000, 0x400000, CRC(1b305a13) SHA1(3d213a77b7a019fe4511097e7a27aa0688a3a586) )
2590   ROM_LOAD( "ff2sprlm.11p", 0x0400000, 0x400000, CRC(421a8fbf) SHA1(8bd6f3e1ac9c7b0ac9d25dfbce35f5b7a5d5bcc7) )
2591   ROM_LOAD( "ff2sprum.10p", 0x0800000, 0x400000, CRC(cb53c03e) SHA1(c39a44cad240c5b77c235c07ea700f9847ab9482) )
2592   ROM_LOAD( "ff2spruu.9p",  0x0c00000, 0x400000, CRC(c134b0de) SHA1(cea9d9f4ce2f45a93c797ed467d8458521db9b3d) )
24892593
2490   ROM_REGION( 0x4000000, "textile2", 0 )   /* texture tiles bank 2? */
2491        ROM_LOAD( "ff2spruu.9p",  0x0000000, 0x400000, CRC(c134b0de) SHA1(cea9d9f4ce2f45a93c797ed467d8458521db9b3d) )
2492        ROM_LOAD( "ff2sprum.10p", 0x0800000, 0x400000, CRC(cb53c03e) SHA1(c39a44cad240c5b77c235c07ea700f9847ab9482) )
2493        ROM_LOAD( "ff2sprll.12t", 0x1000000, 0x400000, CRC(1b305a13) SHA1(3d213a77b7a019fe4511097e7a27aa0688a3a586) )
2494        ROM_LOAD( "ff2sprlm.11p", 0x1800000, 0x400000, CRC(421a8fbf) SHA1(8bd6f3e1ac9c7b0ac9d25dfbce35f5b7a5d5bcc7) )
2594   ROM_REGION16_LE( 0x200000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2595   ROM_LOAD( "ff2ccrl.11a",  0x000000, 0x200000, CRC(f1f9e77c) SHA1(adf659a4671ea066817e6620b7d7d5f60f6e01e5) )
24952596
2496   ROM_REGION( 0x2000000, "textile2d", 0 )   /* duplicate of texture tiles bank 2? */
2497        ROM_LOAD( "ff2spruu.9t",  0x0000000, 0x400000, CRC(c134b0de) SHA1(cea9d9f4ce2f45a93c797ed467d8458521db9b3d) )
2498        ROM_LOAD( "ff2sprum.10t", 0x0800000, 0x400000, CRC(cb53c03e) SHA1(c39a44cad240c5b77c235c07ea700f9847ab9482) )
2499        ROM_LOAD( "ff2sprll.12p", 0x1000000, 0x400000, CRC(1b305a13) SHA1(3d213a77b7a019fe4511097e7a27aa0688a3a586) )
2500        ROM_LOAD( "ff2sprlm.11t", 0x1800000, 0x400000, CRC(421a8fbf) SHA1(8bd6f3e1ac9c7b0ac9d25dfbce35f5b7a5d5bcc7) )
2597   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2598   ROM_LOAD( "ff2ccrh.11b",  0x000000, 0x200000, CRC(71228c61) SHA1(b39d0b51f36c0d00a6144ae20613bebee3ed22bc) )
25012599
2502   ROM_REGION( 0x400000, "textilemap", 0 )   /* texture tilemap */
2503        ROM_LOAD( "ff2ccrl.11a",  0x000000, 0x200000, CRC(f1f9e77c) SHA1(adf659a4671ea066817e6620b7d7d5f60f6e01e5) )
2504        ROM_LOAD( "ff2ccrh.11b",  0x200000, 0x200000, CRC(71228c61) SHA1(b39d0b51f36c0d00a6144ae20613bebee3ed22bc) )
2600   ROM_REGION32_BE( 0x800000, "pointrom", 0 )   /* 3D model data */
2601   ROM_LOAD32_WORD_SWAP( "ff2pt0h.9l",   0x000000, 0x400000, CRC(344ce7a5) SHA1(79d2c4495b47592be4dee6e39294dd3194eb1d5f) )
2602   ROM_LOAD32_WORD_SWAP( "ff2pt0l.9j",   0x000002, 0x400000, CRC(7eeda441) SHA1(78648559abec5e1f04622cd1cfd5d94bddda7dbf) )
25052603
2506   ROM_REGION( 0x400000, "textilemp2", 0 )   /* duplicate texture tilemap */
2507        ROM_LOAD( "ff2ccrl.11e",  0x000000, 0x200000, CRC(f1f9e77c) SHA1(adf659a4671ea066817e6620b7d7d5f60f6e01e5) )
2508        ROM_LOAD( "ff2ccrh.11f",  0x000000, 0x200000, CRC(71228c61) SHA1(b39d0b51f36c0d00a6144ae20613bebee3ed22bc) )
2604   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2605   ROM_LOAD( "ff2wavel.2s",  0x000000, 0x800000, CRC(6235c605) SHA1(521eaee80ac17c0936877d49394e5390fa0ff8a0) )
2606   ROM_LOAD( "ff2waveh.3s",  0x800000, 0x800000, CRC(2a59492a) SHA1(886ec0a4a71048d65f93c52df96416e74d23b3ec) )
25092607
2510   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2511        ROM_LOAD32_WORD( "ff2pt0l.9j",   0x000000, 0x400000, CRC(7eeda441) SHA1(78648559abec5e1f04622cd1cfd5d94bddda7dbf) )
2512        ROM_LOAD32_WORD( "ff2pt0h.9l",   0x000002, 0x400000, CRC(344ce7a5) SHA1(79d2c4495b47592be4dee6e39294dd3194eb1d5f) )
2513
2514   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2515        ROM_LOAD( "ff2wavel.2s",  0x000000, 0x800000, CRC(6235c605) SHA1(521eaee80ac17c0936877d49394e5390fa0ff8a0) )
2516        ROM_LOAD( "ff2waveh.3s",  0x800000, 0x800000, CRC(2a59492a) SHA1(886ec0a4a71048d65f93c52df96416e74d23b3ec) )
2608   ROM_REGION( 0x400000, "dups", 0 )   /* duplicate roms */
2609   ROM_LOAD( "ff2cguu.5f",   0x000000, 0x400000, CRC(595deee4) SHA1(b29ff9c6ba17737f1f87c05b2d899d80b0b72dbb) )
2610   ROM_LOAD( "ff2cgum.6f",   0x000000, 0x400000, CRC(b808be59) SHA1(906bfbb5d34feef9697da545a93930fe6e56685c) )
2611   ROM_LOAD( "ff2cgll.8f",   0x000000, 0x400000, CRC(8e6c34eb) SHA1(795631c8019011246ed1e5546de4433dc22dd9e7) )
2612   ROM_LOAD( "ff2cglm.7f",   0x000000, 0x400000, CRC(406f321b) SHA1(41a2b0229d5370f141b9d6a4e1801e2f9973f660) )
2613   ROM_LOAD( "ff2spruu.9t",  0x000000, 0x400000, CRC(c134b0de) SHA1(cea9d9f4ce2f45a93c797ed467d8458521db9b3d) )
2614   ROM_LOAD( "ff2sprum.10t", 0x000000, 0x400000, CRC(cb53c03e) SHA1(c39a44cad240c5b77c235c07ea700f9847ab9482) )
2615   ROM_LOAD( "ff2sprll.12p", 0x000000, 0x400000, CRC(1b305a13) SHA1(3d213a77b7a019fe4511097e7a27aa0688a3a586) )
2616   ROM_LOAD( "ff2sprlm.11t", 0x000000, 0x400000, CRC(421a8fbf) SHA1(8bd6f3e1ac9c7b0ac9d25dfbce35f5b7a5d5bcc7) )
2617   ROM_LOAD( "ff2ccrl.11e",  0x000000, 0x200000, CRC(f1f9e77c) SHA1(adf659a4671ea066817e6620b7d7d5f60f6e01e5) )
2618   ROM_LOAD( "ff2ccrh.11f",  0x000000, 0x200000, CRC(71228c61) SHA1(b39d0b51f36c0d00a6144ae20613bebee3ed22bc) )
25172619ROM_END
25182620
25192621ROM_START( motoxgo )
25202622   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2521        ROM_LOAD16_BYTE( "mg3vera.ic2",  0x000000, 0x200000, CRC(1bf06f00) SHA1(e9d04e9f19bff7a58cb280dd1d5db12801b68ba0) )
2522        ROM_LOAD16_BYTE( "mg3vera.ic1",  0x000001, 0x200000, CRC(f5e6e25b) SHA1(1de30e8e831be66987112645a9db3a3001b89fe6) )
2623   ROM_LOAD16_BYTE( "mg3vera.ic2",  0x000000, 0x200000, CRC(1bf06f00) SHA1(e9d04e9f19bff7a58cb280dd1d5db12801b68ba0) )
2624   ROM_LOAD16_BYTE( "mg3vera.ic1",  0x000001, 0x200000, CRC(f5e6e25b) SHA1(1de30e8e831be66987112645a9db3a3001b89fe6) )
25232625
25242626   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2525        ROM_LOAD16_WORD_SWAP( "mg3vera.ic3",  0x000000, 0x080000, CRC(9e3d46a8) SHA1(9ffa5b91ea51cc0fb97def25ce47efa3441f3c6f) )
2627   ROM_LOAD16_WORD_SWAP( "mg3vera.ic3",  0x000000, 0x080000, CRC(9e3d46a8) SHA1(9ffa5b91ea51cc0fb97def25ce47efa3441f3c6f) )
25262628
25272629   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
2528        ROM_LOAD( "asca-3a.ic14", 0x000000, 0x040000, CRC(8e9266e5) SHA1(ffa8782ca641d71d57df23ed1c5911db05d3df97) )
2630   ROM_LOAD( "asca-3a.ic14", 0x000000, 0x040000, CRC(8e9266e5) SHA1(ffa8782ca641d71d57df23ed1c5911db05d3df97) )
25292631
25302632   ROM_REGION( 0x20000, "exioboard", 0 )   /* "extra" I/O board (uses Fujitsu MB90611A MCU) */
2531        ROM_LOAD( "mg1prog0a.3a", 0x000000, 0x020000, CRC(b2b5be8f) SHA1(803652b7b8fde2196b7fb742ba8b9843e4fcd2de) )
2633   ROM_LOAD( "mg1prog0a.3a", 0x000000, 0x020000, CRC(b2b5be8f) SHA1(803652b7b8fde2196b7fb742ba8b9843e4fcd2de) )
25322634
25332635   ROM_REGION32_BE( 0x2000000, "data", ROMREGION_ERASEFF )   /* data roms */
2534        ROM_LOAD16_BYTE( "mg1mtah.2j",   0x000000, 0x800000, CRC(845f4768) SHA1(9c03b1f6dcd9d1f43c2958d855221be7f9415c47) )
2535        ROM_LOAD16_BYTE( "mg1mtal.2h",   0x000001, 0x800000, CRC(fdad0f0a) SHA1(420d50f012af40f80b196d3aae320376e6c32367) )
2636   ROM_LOAD16_BYTE( "mg1mtah.2j",   0x000000, 0x800000, CRC(845f4768) SHA1(9c03b1f6dcd9d1f43c2958d855221be7f9415c47) )
2637   ROM_LOAD16_BYTE( "mg1mtal.2h",   0x000001, 0x800000, CRC(fdad0f0a) SHA1(420d50f012af40f80b196d3aae320376e6c32367) )
25362638
25372639   ROM_REGION( 0x2000000, "textile", ROMREGION_ERASEFF )   /* texture tiles */
2538        ROM_LOAD( "mg1cgum.4j",   0x000000, 0x800000, CRC(46a77d73) SHA1(132ce2452ee68ba374e98b59032ac0a1a277078d) )
2539        ROM_LOAD( "mg1cgll.4m",   0x000000, 0x800000, CRC(175dfe34) SHA1(66ae35b0084159aea1afeb1a6486fffa635992b5) )
2540        ROM_LOAD( "mg1cglm.4k",   0x000000, 0x800000, CRC(b3e648e7) SHA1(98018ae2276f905a7f74e1dab540a44247524436) )
2640   ROM_LOAD( "mg1cgll.4m",   0x0000000, 0x800000, CRC(175dfe34) SHA1(66ae35b0084159aea1afeb1a6486fffa635992b5) )
2641   ROM_LOAD( "mg1cglm.4k",   0x0800000, 0x800000, CRC(b3e648e7) SHA1(98018ae2276f905a7f74e1dab540a44247524436) )
2642   ROM_LOAD( "mg1cgum.4j",   0x1000000, 0x800000, CRC(46a77d73) SHA1(132ce2452ee68ba374e98b59032ac0a1a277078d) )
25412643
2542   ROM_REGION( 0x2000000, "textile2", ROMREGION_ERASEFF )   /* second copy of texture tiles */
2543        ROM_LOAD( "mg1cgum.5j",   0x000000, 0x800000, CRC(46a77d73) SHA1(132ce2452ee68ba374e98b59032ac0a1a277078d) )
2544        ROM_LOAD( "mg1cgll.5m",   0x000000, 0x800000, CRC(175dfe34) SHA1(66ae35b0084159aea1afeb1a6486fffa635992b5) )
2545        ROM_LOAD( "mg1cglm.5k",   0x000000, 0x800000, CRC(b3e648e7) SHA1(98018ae2276f905a7f74e1dab540a44247524436) )
2644   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2645   ROM_LOAD( "mg1ccrl.7f",   0x000000, 0x400000, CRC(5372e300) SHA1(63a49782289ed93a321ca7d193241fb83ca97e6b) )
25462646
2547   ROM_REGION( 0x600000, "textilemap", ROMREGION_ERASEFF )   /* texture tilemap */
2548        ROM_LOAD( "mg1ccrl.7f",   0x000000, 0x400000, CRC(5372e300) SHA1(63a49782289ed93a321ca7d193241fb83ca97e6b) )
2549        ROM_LOAD( "mg1ccrh.7e",   0x400000, 0x200000, CRC(2e77597d) SHA1(58dd83c1b0c08115e728c5e7dea5e62135b821ba) )
2647   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2648   ROM_LOAD( "mg1ccrh.7e",   0x000000, 0x200000, CRC(2e77597d) SHA1(58dd83c1b0c08115e728c5e7dea5e62135b821ba) )
25502649
2551   ROM_REGION( 0x600000, "textilemap2", ROMREGION_ERASEFF) /* second copy of texture tilemap */
2552        ROM_LOAD( "mg1ccrl.7m",   0x000000, 0x400000, CRC(5372e300) SHA1(63a49782289ed93a321ca7d193241fb83ca97e6b) )
2553        ROM_LOAD( "mg1ccrh.7k",   0x400000, 0x200000, CRC(2e77597d) SHA1(58dd83c1b0c08115e728c5e7dea5e62135b821ba) )
2650   ROM_REGION32_BE( 0x1000000, "pointrom", ROMREGION_ERASEFF )   /* 3D model data */
2651   ROM_LOAD32_WORD( "mg1pt0h.7a",   0x000000, 0x400000, CRC(c9ba1b47) SHA1(42ec0638edb4c502ff0a340c4cf590bdd767cfe2) )
2652   ROM_LOAD32_WORD( "mg1pt0l.7c",   0x000002, 0x400000, CRC(3b9e95d3) SHA1(d7823ed6c590669ccd4098ed439599a3eb814ed1) )
2653   ROM_LOAD32_WORD( "mg1pt1l.5c",   0x800000, 0x400000, CRC(0dd2f358) SHA1(3537e6be3fec9fec8d5a8dd02d9cf67b3805f8f0) )
2654   ROM_LOAD32_WORD( "mg1pt1h.5a",   0x800002, 0x400000, CRC(8d4f7097) SHA1(004e9ed0b5d6ce83ffadb9bd429fa7560abdb598) )
25542655
2555   ROM_REGION32_LE( 0x2000000, "pointrom", ROMREGION_ERASEFF )   /* 3D model data */
2556        ROM_LOAD32_WORD( "mg1pt0l.7c",   0x000000, 0x400000, CRC(3b9e95d3) SHA1(d7823ed6c590669ccd4098ed439599a3eb814ed1) )
2557        ROM_LOAD32_WORD( "mg1pt0h.7a",   0x000002, 0x400000, CRC(c9ba1b47) SHA1(42ec0638edb4c502ff0a340c4cf590bdd767cfe2) )
2558        ROM_LOAD32_WORD( "mg1pt1h.5a",   0x800000, 0x400000, CRC(8d4f7097) SHA1(004e9ed0b5d6ce83ffadb9bd429fa7560abdb598) )
2559        ROM_LOAD32_WORD( "mg1pt1l.5c",   0x800002, 0x400000, CRC(0dd2f358) SHA1(3537e6be3fec9fec8d5a8dd02d9cf67b3805f8f0) )
2656   ROM_REGION( 0x1000000, "c352", ROMREGION_ERASEFF ) /* C352 PCM samples */
2657   ROM_LOAD( "mg1wavel.2c",  0x000000, 0x800000, CRC(f78b1b4d) SHA1(47cd654ec0a69de0dc81b8d83692eebf5611228b) )
2658   ROM_LOAD( "mg1waveh.2a",  0x800000, 0x800000, CRC(8cb73877) SHA1(2e2b170c7ff889770c13b4ab7ac316b386ada153) )
25602659
2561   ROM_REGION( 0x1000000, "c352", ROMREGION_ERASEFF ) /* C352 PCM samples */
2562        ROM_LOAD( "mg1wavel.2c",  0x000000, 0x800000, CRC(f78b1b4d) SHA1(47cd654ec0a69de0dc81b8d83692eebf5611228b) )
2563        ROM_LOAD( "mg1waveh.2a",  0x800000, 0x800000, CRC(8cb73877) SHA1(2e2b170c7ff889770c13b4ab7ac316b386ada153) )
2660   ROM_REGION( 0x800000, "dups", 0 )   /* duplicate roms */
2661   ROM_LOAD( "mg1cgll.5m",   0x000000, 0x800000, CRC(175dfe34) SHA1(66ae35b0084159aea1afeb1a6486fffa635992b5) )
2662   ROM_LOAD( "mg1cglm.5k",   0x000000, 0x800000, CRC(b3e648e7) SHA1(98018ae2276f905a7f74e1dab540a44247524436) )
2663   ROM_LOAD( "mg1cgum.5j",   0x000000, 0x800000, CRC(46a77d73) SHA1(132ce2452ee68ba374e98b59032ac0a1a277078d) )
2664   ROM_LOAD( "mg1ccrl.7m",   0x000000, 0x400000, CRC(5372e300) SHA1(63a49782289ed93a321ca7d193241fb83ca97e6b) )
2665   ROM_LOAD( "mg1ccrh.7k",   0x400000, 0x200000, CRC(2e77597d) SHA1(58dd83c1b0c08115e728c5e7dea5e62135b821ba) )
25642666ROM_END
25652667
25662668ROM_START( timecrs2 )
25672669   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2568        ROM_LOAD16_BYTE( "tss3verb.2",   0x000000, 0x200000, CRC(c7be691f) SHA1(5e2e7a0db3d8ce6dfeb6c0d99e9fe6a9f9cab467) )
2569        ROM_LOAD16_BYTE( "tss3verb.1",   0x000001, 0x200000, CRC(6e3f232b) SHA1(8007d8f31a605a5df89938d7c9f9d3d209c934be) )
2670   ROM_LOAD16_BYTE( "tss3verb.2",   0x000000, 0x200000, CRC(c7be691f) SHA1(5e2e7a0db3d8ce6dfeb6c0d99e9fe6a9f9cab467) )
2671   ROM_LOAD16_BYTE( "tss3verb.1",   0x000001, 0x200000, CRC(6e3f232b) SHA1(8007d8f31a605a5df89938d7c9f9d3d209c934be) )
25702672
25712673   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2572        ROM_LOAD16_WORD_SWAP( "tss3verb.3",   0x000000, 0x080000, CRC(41e41994) SHA1(eabc1a307c329070bfc6486cb68169c94ff8a162) )
2674   ROM_LOAD16_WORD_SWAP( "tss3verb.3",   0x000000, 0x080000, CRC(41e41994) SHA1(eabc1a307c329070bfc6486cb68169c94ff8a162) )
25732675
25742676   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
25752677   ROM_LOAD( "tssioprog.ic3", 0x000000, 0x040000, CRC(edad4538) SHA1(1330189184a636328d956c0e435f8d9ad2e96a80) )
25762678
25772679   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2578        ROM_LOAD16_BYTE( "tss1mtah.2j",  0x0000000, 0x800000, CRC(697c26ed) SHA1(72f6f69e89496ba0c6183b35c3bde71f5a3c721f) )
2579        ROM_LOAD16_BYTE( "tss1mtal.2h",  0x0000001, 0x800000, CRC(bfc79190) SHA1(04bda00c4cc5660d27af4f3b0ee3550dea8d3805) )
2580        ROM_LOAD16_BYTE( "tss1mtbh.2m",  0x1000000, 0x800000, CRC(82582776) SHA1(7c790d09bac660ea1c62da3ffb21ab43f2461594) )
2581        ROM_LOAD16_BYTE( "tss1mtbl.2f",  0x1000001, 0x800000, CRC(e648bea4) SHA1(3803d03e72b25fbcc124d5b25066d25629b76b94) )
2680   ROM_LOAD16_BYTE( "tss1mtah.2j",  0x0000000, 0x800000, CRC(697c26ed) SHA1(72f6f69e89496ba0c6183b35c3bde71f5a3c721f) )
2681   ROM_LOAD16_BYTE( "tss1mtal.2h",  0x0000001, 0x800000, CRC(bfc79190) SHA1(04bda00c4cc5660d27af4f3b0ee3550dea8d3805) )
2682   ROM_LOAD16_BYTE( "tss1mtbh.2m",  0x1000000, 0x800000, CRC(82582776) SHA1(7c790d09bac660ea1c62da3ffb21ab43f2461594) )
2683   ROM_LOAD16_BYTE( "tss1mtbl.2f",  0x1000001, 0x800000, CRC(e648bea4) SHA1(3803d03e72b25fbcc124d5b25066d25629b76b94) )
25822684
25832685   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2584        ROM_LOAD( "tss1cguu.4f",  0x0000000, 0x800000, CRC(76924e04) SHA1(751065d6ce658cbbcd88f854f6937ebd2204ec68) )
2585        ROM_LOAD( "tss1cgum.4j",  0x0800000, 0x800000, CRC(c22739e1) SHA1(8671ee047bb248033656c50befd1c35e5e478e1a) )
2586        ROM_LOAD( "tss1cgll.4m",  0x1000000, 0x800000, CRC(18433aaa) SHA1(08539beb2e66ec4e41062621fc098b121c669546) )
2587        ROM_LOAD( "tss1cglm.4k",  0x1800000, 0x800000, CRC(669974c2) SHA1(cfebe199631e38f547b38fcd35f1645b74e8dd0a) )
2686   ROM_LOAD( "tss1cgll.4m",  0x0000000, 0x800000, CRC(18433aaa) SHA1(08539beb2e66ec4e41062621fc098b121c669546) )
2687   ROM_LOAD( "tss1cglm.4k",  0x0800000, 0x800000, CRC(669974c2) SHA1(cfebe199631e38f547b38fcd35f1645b74e8dd0a) )
2688   ROM_LOAD( "tss1cgum.4j",  0x1000000, 0x800000, CRC(c22739e1) SHA1(8671ee047bb248033656c50befd1c35e5e478e1a) )
2689   ROM_LOAD( "tss1cguu.4f",  0x1800000, 0x800000, CRC(76924e04) SHA1(751065d6ce658cbbcd88f854f6937ebd2204ec68) )
25882690
2589   ROM_REGION( 0x600000, "textilemap", 0 )   /* texture tilemap */
2590        ROM_LOAD( "tss1ccrl.7f",  0x000000, 0x400000, CRC(3a325fe7) SHA1(882735dce7aeb36f9e88a983498360f5de901e9d) )
2591        ROM_LOAD( "tss1ccrh.7e",  0x400000, 0x200000, CRC(f998de1a) SHA1(371f540f505608297c5ffcfb623b983ca8310afb) )
2691   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2692   ROM_LOAD( "tss1ccrl.7f",  0x000000, 0x400000, CRC(3a325fe7) SHA1(882735dce7aeb36f9e88a983498360f5de901e9d) )
25922693
2593   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2594        ROM_LOAD32_WORD( "tss1pt0l.7c",  0x0000000, 0x400000, CRC(896f0fb4) SHA1(bdfa99eb21ce4fc8021f9d95a5558a34f9942c57) )
2595        ROM_LOAD32_WORD( "tss1pt0h.7a",  0x0000002, 0x400000, CRC(cdbe0ba8) SHA1(f8c6da31654c0a2a8024888ffb7fc1c783b2d629) )
2596        ROM_LOAD32_WORD( "tss1pt1l.5c",  0x0800000, 0x400000, CRC(5a09921f) SHA1(c23885708c7adf0b81c2c9346e21b869634a5b35) )
2597        ROM_LOAD32_WORD( "tss1pt1h.5a",  0x0800002, 0x400000, CRC(63647596) SHA1(833412be8f61686bd7e06c2738df740e0e585d0f) )
2598        ROM_LOAD32_WORD( "tss1pt2l.4c",  0x1000000, 0x400000, CRC(4b230d79) SHA1(794cee0a19993e90913f58507c53224f361e9663) )
2599        ROM_LOAD32_WORD( "tss1pt2h.4a",  0x1000002, 0x400000, CRC(9b06e22d) SHA1(cff5ed098112a4f0a2bc8937e226f50066e605b1) )
2694   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2695   ROM_LOAD( "tss1ccrh.7e",  0x000000, 0x200000, CRC(f998de1a) SHA1(371f540f505608297c5ffcfb623b983ca8310afb) )
26002696
2697   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2698   ROM_LOAD32_WORD_SWAP( "tss1pt0h.7a",  0x0000000, 0x400000, CRC(cdbe0ba8) SHA1(f8c6da31654c0a2a8024888ffb7fc1c783b2d629) )
2699   ROM_LOAD32_WORD_SWAP( "tss1pt0l.7c",  0x0000002, 0x400000, CRC(896f0fb4) SHA1(bdfa99eb21ce4fc8021f9d95a5558a34f9942c57) )
2700   ROM_LOAD32_WORD_SWAP( "tss1pt1h.5a",  0x0800000, 0x400000, CRC(63647596) SHA1(833412be8f61686bd7e06c2738df740e0e585d0f) )
2701   ROM_LOAD32_WORD_SWAP( "tss1pt1l.5c",  0x0800002, 0x400000, CRC(5a09921f) SHA1(c23885708c7adf0b81c2c9346e21b869634a5b35) )
2702   ROM_LOAD32_WORD_SWAP( "tss1pt2h.4a",  0x1000000, 0x400000, CRC(9b06e22d) SHA1(cff5ed098112a4f0a2bc8937e226f50066e605b1) )
2703   ROM_LOAD32_WORD_SWAP( "tss1pt2l.4c",  0x1000002, 0x400000, CRC(4b230d79) SHA1(794cee0a19993e90913f58507c53224f361e9663) )
2704
26012705   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2602        ROM_LOAD( "tss1wavel.2c", 0x000000, 0x800000, CRC(deaead26) SHA1(72dac0c3f41d4c3c290f9eb1b50236ae3040a472) )
2603        ROM_LOAD( "tss1waveh.2a", 0x800000, 0x800000, CRC(5c8758b4) SHA1(b85c8f6869900224ef83a2340b17f5bbb2801af9) )
2706   ROM_LOAD( "tss1wavel.2c", 0x000000, 0x800000, CRC(deaead26) SHA1(72dac0c3f41d4c3c290f9eb1b50236ae3040a472) )
2707   ROM_LOAD( "tss1waveh.2a", 0x800000, 0x800000, CRC(5c8758b4) SHA1(b85c8f6869900224ef83a2340b17f5bbb2801af9) )
26042708ROM_END
26052709
26062710ROM_START( timecrs2b )
26072711   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2608        ROM_LOAD16_BYTE( "tss2verb.ic2", 0x000000, 0x200000, CRC(9f56a4df) SHA1(5ecb3cd93726ab6be02762853fd6a45266d6c0bc) )
2609        ROM_LOAD16_BYTE( "tss2verb.ic1", 0x000001, 0x200000, CRC(aa147f71) SHA1(e00267d1a8286942c83dc35289ad65bd3cb6d8db) )
2712   ROM_LOAD16_BYTE( "tss2verb.ic2", 0x000000, 0x200000, CRC(9f56a4df) SHA1(5ecb3cd93726ab6be02762853fd6a45266d6c0bc) )
2713   ROM_LOAD16_BYTE( "tss2verb.ic1", 0x000001, 0x200000, CRC(aa147f71) SHA1(e00267d1a8286942c83dc35289ad65bd3cb6d8db) )
26102714
26112715   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2612        ROM_LOAD16_WORD_SWAP( "tss3verb.3",   0x000000, 0x080000, CRC(41e41994) SHA1(eabc1a307c329070bfc6486cb68169c94ff8a162) )
2716   ROM_LOAD16_WORD_SWAP( "tss3verb.3",   0x000000, 0x080000, CRC(41e41994) SHA1(eabc1a307c329070bfc6486cb68169c94ff8a162) )
26132717
26142718   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
26152719   ROM_LOAD( "tssioprog.ic3", 0x000000, 0x040000, CRC(edad4538) SHA1(1330189184a636328d956c0e435f8d9ad2e96a80) )
26162720
26172721   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2618        ROM_LOAD16_BYTE( "tss1mtah.2j",  0x0000000, 0x800000, CRC(697c26ed) SHA1(72f6f69e89496ba0c6183b35c3bde71f5a3c721f) )
2619        ROM_LOAD16_BYTE( "tss1mtal.2h",  0x0000001, 0x800000, CRC(bfc79190) SHA1(04bda00c4cc5660d27af4f3b0ee3550dea8d3805) )
2620        ROM_LOAD16_BYTE( "tss1mtbh.2m",  0x1000000, 0x800000, CRC(82582776) SHA1(7c790d09bac660ea1c62da3ffb21ab43f2461594) )
2621        ROM_LOAD16_BYTE( "tss1mtbl.2f",  0x1000001, 0x800000, CRC(e648bea4) SHA1(3803d03e72b25fbcc124d5b25066d25629b76b94) )
2722   ROM_LOAD16_BYTE( "tss1mtah.2j",  0x0000000, 0x800000, CRC(697c26ed) SHA1(72f6f69e89496ba0c6183b35c3bde71f5a3c721f) )
2723   ROM_LOAD16_BYTE( "tss1mtal.2h",  0x0000001, 0x800000, CRC(bfc79190) SHA1(04bda00c4cc5660d27af4f3b0ee3550dea8d3805) )
2724   ROM_LOAD16_BYTE( "tss1mtbh.2m",  0x1000000, 0x800000, CRC(82582776) SHA1(7c790d09bac660ea1c62da3ffb21ab43f2461594) )
2725   ROM_LOAD16_BYTE( "tss1mtbl.2f",  0x1000001, 0x800000, CRC(e648bea4) SHA1(3803d03e72b25fbcc124d5b25066d25629b76b94) )
26222726
26232727   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2624        ROM_LOAD( "tss1cguu.4f",  0x0000000, 0x800000, CRC(76924e04) SHA1(751065d6ce658cbbcd88f854f6937ebd2204ec68) )
2625        ROM_LOAD( "tss1cgum.4j",  0x0800000, 0x800000, CRC(c22739e1) SHA1(8671ee047bb248033656c50befd1c35e5e478e1a) )
2626        ROM_LOAD( "tss1cgll.4m",  0x1000000, 0x800000, CRC(18433aaa) SHA1(08539beb2e66ec4e41062621fc098b121c669546) )
2627        ROM_LOAD( "tss1cglm.4k",  0x1800000, 0x800000, CRC(669974c2) SHA1(cfebe199631e38f547b38fcd35f1645b74e8dd0a) )
2728   ROM_LOAD( "tss1cgll.4m",  0x0000000, 0x800000, CRC(18433aaa) SHA1(08539beb2e66ec4e41062621fc098b121c669546) )
2729   ROM_LOAD( "tss1cglm.4k",  0x0800000, 0x800000, CRC(669974c2) SHA1(cfebe199631e38f547b38fcd35f1645b74e8dd0a) )
2730   ROM_LOAD( "tss1cgum.4j",  0x1000000, 0x800000, CRC(c22739e1) SHA1(8671ee047bb248033656c50befd1c35e5e478e1a) )
2731   ROM_LOAD( "tss1cguu.4f",  0x1800000, 0x800000, CRC(76924e04) SHA1(751065d6ce658cbbcd88f854f6937ebd2204ec68) )
26282732
2629   ROM_REGION( 0x600000, "textilemap", 0 )   /* texture tilemap */
2630        ROM_LOAD( "tss1ccrl.7f",  0x000000, 0x400000, CRC(3a325fe7) SHA1(882735dce7aeb36f9e88a983498360f5de901e9d) )
2631        ROM_LOAD( "tss1ccrh.7e",  0x400000, 0x200000, CRC(f998de1a) SHA1(371f540f505608297c5ffcfb623b983ca8310afb) )
2733   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2734   ROM_LOAD( "tss1ccrl.7f",  0x000000, 0x400000, CRC(3a325fe7) SHA1(882735dce7aeb36f9e88a983498360f5de901e9d) )
26322735
2633   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2634        ROM_LOAD32_WORD( "tss1pt0l.7c",  0x0000000, 0x400000, CRC(896f0fb4) SHA1(bdfa99eb21ce4fc8021f9d95a5558a34f9942c57) )
2635        ROM_LOAD32_WORD( "tss1pt0h.7a",  0x0000002, 0x400000, CRC(cdbe0ba8) SHA1(f8c6da31654c0a2a8024888ffb7fc1c783b2d629) )
2636        ROM_LOAD32_WORD( "tss1pt1l.5c",  0x0800000, 0x400000, CRC(5a09921f) SHA1(c23885708c7adf0b81c2c9346e21b869634a5b35) )
2637        ROM_LOAD32_WORD( "tss1pt1h.5a",  0x0800002, 0x400000, CRC(63647596) SHA1(833412be8f61686bd7e06c2738df740e0e585d0f) )
2638        ROM_LOAD32_WORD( "tss1pt2l.4c",  0x1000000, 0x400000, CRC(4b230d79) SHA1(794cee0a19993e90913f58507c53224f361e9663) )
2639        ROM_LOAD32_WORD( "tss1pt2h.4a",  0x1000002, 0x400000, CRC(9b06e22d) SHA1(cff5ed098112a4f0a2bc8937e226f50066e605b1) )
2736   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2737   ROM_LOAD( "tss1ccrh.7e",  0x000000, 0x200000, CRC(f998de1a) SHA1(371f540f505608297c5ffcfb623b983ca8310afb) )
26402738
2739   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2740   ROM_LOAD32_WORD_SWAP( "tss1pt0h.7a",  0x0000000, 0x400000, CRC(cdbe0ba8) SHA1(f8c6da31654c0a2a8024888ffb7fc1c783b2d629) )
2741   ROM_LOAD32_WORD_SWAP( "tss1pt0l.7c",  0x0000002, 0x400000, CRC(896f0fb4) SHA1(bdfa99eb21ce4fc8021f9d95a5558a34f9942c57) )
2742   ROM_LOAD32_WORD_SWAP( "tss1pt1h.5a",  0x0800000, 0x400000, CRC(63647596) SHA1(833412be8f61686bd7e06c2738df740e0e585d0f) )
2743   ROM_LOAD32_WORD_SWAP( "tss1pt1l.5c",  0x0800002, 0x400000, CRC(5a09921f) SHA1(c23885708c7adf0b81c2c9346e21b869634a5b35) )
2744   ROM_LOAD32_WORD_SWAP( "tss1pt2h.4a",  0x1000000, 0x400000, CRC(9b06e22d) SHA1(cff5ed098112a4f0a2bc8937e226f50066e605b1) )
2745   ROM_LOAD32_WORD_SWAP( "tss1pt2l.4c",  0x1000002, 0x400000, CRC(4b230d79) SHA1(794cee0a19993e90913f58507c53224f361e9663) )
2746
26412747   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2642        ROM_LOAD( "tss1wavel.2c", 0x000000, 0x800000, CRC(deaead26) SHA1(72dac0c3f41d4c3c290f9eb1b50236ae3040a472) )
2643        ROM_LOAD( "tss1waveh.2a", 0x800000, 0x800000, CRC(5c8758b4) SHA1(b85c8f6869900224ef83a2340b17f5bbb2801af9) )
2748   ROM_LOAD( "tss1wavel.2c", 0x000000, 0x800000, CRC(deaead26) SHA1(72dac0c3f41d4c3c290f9eb1b50236ae3040a472) )
2749   ROM_LOAD( "tss1waveh.2a", 0x800000, 0x800000, CRC(5c8758b4) SHA1(b85c8f6869900224ef83a2340b17f5bbb2801af9) )
26442750ROM_END
26452751
26462752ROM_START( timecrs2c )
26472753   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2648        ROM_LOAD16_BYTE( "tss4vera.2",   0x000000, 0x200000, CRC(c84edd3b) SHA1(0b577a8ef6e74afa991dd81c2db19041787724da) )
2649        ROM_LOAD16_BYTE( "tss4vera.1",   0x000001, 0x200000, CRC(26f57c83) SHA1(c8983c26b7524a35257a242b66a9413eb354ca0d) )
2754   ROM_LOAD16_BYTE( "tss4vera.2",   0x000000, 0x200000, CRC(c84edd3b) SHA1(0b577a8ef6e74afa991dd81c2db19041787724da) )
2755   ROM_LOAD16_BYTE( "tss4vera.1",   0x000001, 0x200000, CRC(26f57c83) SHA1(c8983c26b7524a35257a242b66a9413eb354ca0d) )
26502756
26512757   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2652        ROM_LOAD16_WORD_SWAP( "tss4vera.3",   0x000000, 0x080000, CRC(41e41994) SHA1(eabc1a307c329070bfc6486cb68169c94ff8a162) )
2758   ROM_LOAD16_WORD_SWAP( "tss4vera.3",   0x000000, 0x080000, CRC(41e41994) SHA1(eabc1a307c329070bfc6486cb68169c94ff8a162) )
26532759
26542760   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
26552761   ROM_LOAD( "tssioprog.ic3", 0x000000, 0x040000, CRC(edad4538) SHA1(1330189184a636328d956c0e435f8d9ad2e96a80) )
26562762
26572763   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2658        ROM_LOAD16_BYTE( "tss1mtah.2j",  0x0000000, 0x800000, CRC(697c26ed) SHA1(72f6f69e89496ba0c6183b35c3bde71f5a3c721f) )
2659        ROM_LOAD16_BYTE( "tss1mtal.2h",  0x0000001, 0x800000, CRC(bfc79190) SHA1(04bda00c4cc5660d27af4f3b0ee3550dea8d3805) )
2660        ROM_LOAD16_BYTE( "tss1mtbh.2m",  0x1000000, 0x800000, CRC(82582776) SHA1(7c790d09bac660ea1c62da3ffb21ab43f2461594) )
2661        ROM_LOAD16_BYTE( "tss1mtbl.2f",  0x1000001, 0x800000, CRC(e648bea4) SHA1(3803d03e72b25fbcc124d5b25066d25629b76b94) )
2764   ROM_LOAD16_BYTE( "tss1mtah.2j",  0x0000000, 0x800000, CRC(697c26ed) SHA1(72f6f69e89496ba0c6183b35c3bde71f5a3c721f) )
2765   ROM_LOAD16_BYTE( "tss1mtal.2h",  0x0000001, 0x800000, CRC(bfc79190) SHA1(04bda00c4cc5660d27af4f3b0ee3550dea8d3805) )
2766   ROM_LOAD16_BYTE( "tss1mtbh.2m",  0x1000000, 0x800000, CRC(82582776) SHA1(7c790d09bac660ea1c62da3ffb21ab43f2461594) )
2767   ROM_LOAD16_BYTE( "tss1mtbl.2f",  0x1000001, 0x800000, CRC(e648bea4) SHA1(3803d03e72b25fbcc124d5b25066d25629b76b94) )
26622768
26632769   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2664        ROM_LOAD( "tss1cguu.4f",  0x0000000, 0x800000, CRC(76924e04) SHA1(751065d6ce658cbbcd88f854f6937ebd2204ec68) )
2665        ROM_LOAD( "tss1cgum.4j",  0x0800000, 0x800000, CRC(c22739e1) SHA1(8671ee047bb248033656c50befd1c35e5e478e1a) )
2666        ROM_LOAD( "tss1cgll.4m",  0x1000000, 0x800000, CRC(18433aaa) SHA1(08539beb2e66ec4e41062621fc098b121c669546) )
2667        ROM_LOAD( "tss1cglm.4k",  0x1800000, 0x800000, CRC(669974c2) SHA1(cfebe199631e38f547b38fcd35f1645b74e8dd0a) )
2770   ROM_LOAD( "tss1cgll.4m",  0x0000000, 0x800000, CRC(18433aaa) SHA1(08539beb2e66ec4e41062621fc098b121c669546) )
2771   ROM_LOAD( "tss1cglm.4k",  0x0800000, 0x800000, CRC(669974c2) SHA1(cfebe199631e38f547b38fcd35f1645b74e8dd0a) )
2772   ROM_LOAD( "tss1cgum.4j",  0x1000000, 0x800000, CRC(c22739e1) SHA1(8671ee047bb248033656c50befd1c35e5e478e1a) )
2773   ROM_LOAD( "tss1cguu.4f",  0x1800000, 0x800000, CRC(76924e04) SHA1(751065d6ce658cbbcd88f854f6937ebd2204ec68) )
26682774
2669   ROM_REGION( 0x600000, "textilemap", 0 )   /* texture tilemap */
2670        ROM_LOAD( "tss1ccrl.7f",  0x000000, 0x400000, CRC(3a325fe7) SHA1(882735dce7aeb36f9e88a983498360f5de901e9d) )
2671        ROM_LOAD( "tss1ccrh.7e",  0x400000, 0x200000, CRC(f998de1a) SHA1(371f540f505608297c5ffcfb623b983ca8310afb) )
2775   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2776   ROM_LOAD( "tss1ccrl.7f",  0x000000, 0x400000, CRC(3a325fe7) SHA1(882735dce7aeb36f9e88a983498360f5de901e9d) )
26722777
2673   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2674        ROM_LOAD32_WORD( "tss1pt0l.7c",  0x0000000, 0x400000, CRC(896f0fb4) SHA1(bdfa99eb21ce4fc8021f9d95a5558a34f9942c57) )
2675        ROM_LOAD32_WORD( "tss1pt0h.7a",  0x0000002, 0x400000, CRC(cdbe0ba8) SHA1(f8c6da31654c0a2a8024888ffb7fc1c783b2d629) )
2676        ROM_LOAD32_WORD( "tss1pt1l.5c",  0x0800000, 0x400000, CRC(5a09921f) SHA1(c23885708c7adf0b81c2c9346e21b869634a5b35) )
2677        ROM_LOAD32_WORD( "tss1pt1h.5a",  0x0800002, 0x400000, CRC(63647596) SHA1(833412be8f61686bd7e06c2738df740e0e585d0f) )
2678        ROM_LOAD32_WORD( "tss1pt2l.4c",  0x1000000, 0x400000, CRC(4b230d79) SHA1(794cee0a19993e90913f58507c53224f361e9663) )
2679        ROM_LOAD32_WORD( "tss1pt2h.4a",  0x1000002, 0x400000, CRC(9b06e22d) SHA1(cff5ed098112a4f0a2bc8937e226f50066e605b1) )
2778   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2779   ROM_LOAD( "tss1ccrh.7e",  0x000000, 0x200000, CRC(f998de1a) SHA1(371f540f505608297c5ffcfb623b983ca8310afb) )
26802780
2781   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2782   ROM_LOAD32_WORD_SWAP( "tss1pt0h.7a",  0x0000000, 0x400000, CRC(cdbe0ba8) SHA1(f8c6da31654c0a2a8024888ffb7fc1c783b2d629) )
2783   ROM_LOAD32_WORD_SWAP( "tss1pt0l.7c",  0x0000002, 0x400000, CRC(896f0fb4) SHA1(bdfa99eb21ce4fc8021f9d95a5558a34f9942c57) )
2784   ROM_LOAD32_WORD_SWAP( "tss1pt1h.5a",  0x0800000, 0x400000, CRC(63647596) SHA1(833412be8f61686bd7e06c2738df740e0e585d0f) )
2785   ROM_LOAD32_WORD_SWAP( "tss1pt1l.5c",  0x0800002, 0x400000, CRC(5a09921f) SHA1(c23885708c7adf0b81c2c9346e21b869634a5b35) )
2786   ROM_LOAD32_WORD_SWAP( "tss1pt2h.4a",  0x1000000, 0x400000, CRC(9b06e22d) SHA1(cff5ed098112a4f0a2bc8937e226f50066e605b1) )
2787   ROM_LOAD32_WORD_SWAP( "tss1pt2l.4c",  0x1000002, 0x400000, CRC(4b230d79) SHA1(794cee0a19993e90913f58507c53224f361e9663) )
2788
26812789   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2682        ROM_LOAD( "tss1wavel.2c", 0x000000, 0x800000, CRC(deaead26) SHA1(72dac0c3f41d4c3c290f9eb1b50236ae3040a472) )
2683        ROM_LOAD( "tss1waveh.2a", 0x800000, 0x800000, CRC(5c8758b4) SHA1(b85c8f6869900224ef83a2340b17f5bbb2801af9) )
2790   ROM_LOAD( "tss1wavel.2c", 0x000000, 0x800000, CRC(deaead26) SHA1(72dac0c3f41d4c3c290f9eb1b50236ae3040a472) )
2791   ROM_LOAD( "tss1waveh.2a", 0x800000, 0x800000, CRC(5c8758b4) SHA1(b85c8f6869900224ef83a2340b17f5bbb2801af9) )
26842792ROM_END
26852793
26862794ROM_START( 500gp )
26872795   /* r4650-generic-xrom-generic: NMON 1.0.8-sys23-19990105 P for SYSTEM23 P1 */
26882796   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2689        ROM_LOAD16_BYTE( "5gp3verc.2",   0x000000, 0x200000, CRC(e2d43468) SHA1(5e861dd223c7fa177febed9803ac353cba18e19d) )
2690        ROM_LOAD16_BYTE( "5gp3verc.1",   0x000001, 0x200000, CRC(f6efc94a) SHA1(785eee2bec5080d4e8ef836f28d446328c942b0e) )
2797   ROM_LOAD16_BYTE( "5gp3verc.2",   0x000000, 0x200000, CRC(e2d43468) SHA1(5e861dd223c7fa177febed9803ac353cba18e19d) )
2798   ROM_LOAD16_BYTE( "5gp3verc.1",   0x000001, 0x200000, CRC(f6efc94a) SHA1(785eee2bec5080d4e8ef836f28d446328c942b0e) )
26912799
26922800   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2693        ROM_LOAD16_WORD_SWAP( "5gp3verc.3",   0x000000, 0x080000, CRC(b323abdf) SHA1(8962e39b48a7074a2d492afb5db3f5f3e5ae2389) )
2801   ROM_LOAD16_WORD_SWAP( "5gp3verc.3",   0x000000, 0x080000, CRC(b323abdf) SHA1(8962e39b48a7074a2d492afb5db3f5f3e5ae2389) )
26942802
26952803   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2696        ROM_LOAD16_BYTE( "5gp1mtah.2j",  0x0000000, 0x800000, CRC(246e4b7a) SHA1(75743294b8f48bffb84f062febfbc02230d49ce9) )
2804   ROM_LOAD16_BYTE( "5gp1mtah.2j",  0x0000000, 0x800000, CRC(246e4b7a) SHA1(75743294b8f48bffb84f062febfbc02230d49ce9) )
26972805   ROM_LOAD16_BYTE( "5gp1mtal.2h",  0x0000001, 0x800000, CRC(1bb00c7b) SHA1(922be45d57330c31853b2dc1642c589952b09188) )
26982806
26992807      /* COMMON FUJII YASUI WAKAO KURE INOUE
27002808         * 0x000000..0x57ffff: all 0xff
27012809         */
2702        ROM_LOAD16_BYTE( "5gp1mtbl.2f",  0x1000000, 0x800000, CRC(66640606) SHA1(c69a0219748241c49315d7464f8156f8068e9cf5) )
2703        ROM_LOAD16_BYTE( "5gp1mtbh.2m",  0x1000001, 0x800000, CRC(352360e8) SHA1(d621dfac3385059c52d215f6623901589a8658a3) )
2810   ROM_LOAD16_BYTE( "5gp1mtbl.2f",  0x1000000, 0x800000, CRC(66640606) SHA1(c69a0219748241c49315d7464f8156f8068e9cf5) )
2811   ROM_LOAD16_BYTE( "5gp1mtbh.2m",  0x1000001, 0x800000, CRC(352360e8) SHA1(d621dfac3385059c52d215f6623901589a8658a3) )
27042812
27052813   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2706        ROM_LOAD( "5gp1cguu.4f",  0x0000000, 0x800000, CRC(c411163b) SHA1(ae644d62357b8b806b160774043e41908fba5d05) )
2707        ROM_LOAD( "5gp1cgum.4j",  0x0800000, 0x800000, CRC(0265b701) SHA1(497a4c33311d3bb315100a78400cf2fa726f1483) )
2708        ROM_LOAD( "5gp1cgll.4m",  0x1000000, 0x800000, CRC(0cc5bf35) SHA1(b75510a94fa6b6d2ed43566e6e84c7ae62f68194) )
2709        ROM_LOAD( "5gp1cglm.4k",  0x1800000, 0x800000, CRC(31557d48) SHA1(b85c3db20b101ba6bdd77487af67c3324bea29d5) )
2814   ROM_LOAD( "5gp1cgll.4m",  0x0000000, 0x800000, CRC(0cc5bf35) SHA1(b75510a94fa6b6d2ed43566e6e84c7ae62f68194) )
2815   ROM_LOAD( "5gp1cglm.4k",  0x0800000, 0x800000, CRC(31557d48) SHA1(b85c3db20b101ba6bdd77487af67c3324bea29d5) )
2816   ROM_LOAD( "5gp1cgum.4j",  0x1000000, 0x800000, CRC(0265b701) SHA1(497a4c33311d3bb315100a78400cf2fa726f1483) )
2817   ROM_LOAD( "5gp1cguu.4f",  0x1800000, 0x800000, CRC(c411163b) SHA1(ae644d62357b8b806b160774043e41908fba5d05) )
27102818
2711   ROM_REGION( 0x600000, "textilemap", 0 )   /* texture tilemap */
2712        ROM_LOAD( "5gp1ccrl.7f",  0x000000, 0x400000, CRC(e7c77e1f) SHA1(0231ddbe2afb880099dfe2657c41236c74c730bb) )
2713        ROM_LOAD( "5gp1ccrh.7e",  0x400000, 0x200000, CRC(b2eba764) SHA1(5e09d1171f0afdeb9ed7337df1dbc924f23d3a0b) )
2819   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2820   ROM_LOAD( "5gp1ccrl.7f",  0x000000, 0x400000, CRC(e7c77e1f) SHA1(0231ddbe2afb880099dfe2657c41236c74c730bb) )
27142821
2715   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2716        ROM_LOAD32_WORD( "5gp1pt0l.7c",  0x0000000, 0x400000, CRC(a0ece0a1) SHA1(b7aab2d78e1525f865214c7de387ccd585de5d34) )
2717        ROM_LOAD32_WORD( "5gp1pt0h.7a",  0x0000002, 0x400000, CRC(5746a8cd) SHA1(e70fc596ab9360f474f716c73d76cb9851370c76) )
2718        ROM_LOAD32_WORD( "5gp1pt1l.5c",  0x0800000, 0x400000, CRC(80b25ad2) SHA1(e9a03fe5bb4ce925f7218ab426ed2a1ca1a26a62) )
2719        ROM_LOAD32_WORD( "5gp1pt1h.5a",  0x0800002, 0x400000, CRC(b1feb5df) SHA1(45db259215511ac3e472895956f70204d4575482) )
2720   ROM_LOAD32_WORD( "5gp1pt2l.4c",  0x1000000, 0x400000, CRC(9289dbeb) SHA1(ec546ad3b1c90609591e599c760c70049ba3b581) )
2721        ROM_LOAD32_WORD( "5gp1pt2h.4a",  0x1000002, 0x400000, CRC(9a693771) SHA1(c988e04cd91c3b7e75b91376fd73be4a7da543e7) )
2722   ROM_LOAD32_WORD( "5gp1pt3l.3c",  0x1800000, 0x400000, CRC(480b120d) SHA1(6c703550faa412095d9633cf508050614e15fbae) )
2723        ROM_LOAD32_WORD( "5gp1pt3h.3a",  0x1800002, 0x400000, CRC(26eaa400) SHA1(0157b76fffe81b40eb970e84c98398807ced92c4) )
2822   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2823   ROM_LOAD( "5gp1ccrh.7e",  0x000000, 0x200000, CRC(b2eba764) SHA1(5e09d1171f0afdeb9ed7337df1dbc924f23d3a0b) )
27242824
2825   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2826   ROM_LOAD32_WORD_SWAP( "5gp1pt0h.7a",  0x0000000, 0x400000, CRC(5746a8cd) SHA1(e70fc596ab9360f474f716c73d76cb9851370c76) )
2827   ROM_LOAD32_WORD_SWAP( "5gp1pt0l.7c",  0x0000002, 0x400000, CRC(a0ece0a1) SHA1(b7aab2d78e1525f865214c7de387ccd585de5d34) )
2828   ROM_LOAD32_WORD_SWAP( "5gp1pt1h.5a",  0x0800000, 0x400000, CRC(b1feb5df) SHA1(45db259215511ac3e472895956f70204d4575482) )
2829   ROM_LOAD32_WORD_SWAP( "5gp1pt1l.5c",  0x0800002, 0x400000, CRC(80b25ad2) SHA1(e9a03fe5bb4ce925f7218ab426ed2a1ca1a26a62) )
2830   ROM_LOAD32_WORD_SWAP( "5gp1pt2h.4a",  0x1000000, 0x400000, CRC(9a693771) SHA1(c988e04cd91c3b7e75b91376fd73be4a7da543e7) )
2831   ROM_LOAD32_WORD_SWAP( "5gp1pt2l.4c",  0x1000002, 0x400000, CRC(9289dbeb) SHA1(ec546ad3b1c90609591e599c760c70049ba3b581) )
2832   ROM_LOAD32_WORD_SWAP( "5gp1pt3h.3a",  0x1800000, 0x400000, CRC(26eaa400) SHA1(0157b76fffe81b40eb970e84c98398807ced92c4) )
2833   ROM_LOAD32_WORD_SWAP( "5gp1pt3l.3c",  0x1800002, 0x400000, CRC(480b120d) SHA1(6c703550faa412095d9633cf508050614e15fbae) )
2834
27252835   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2726        ROM_LOAD( "5gp1wavel.2c", 0x000000, 0x800000, CRC(aa634cc2) SHA1(e96f5c682039bc6ef22bf90e98f4da78486bd2b1) )
2727        ROM_LOAD( "5gp1waveh.2a", 0x800000, 0x800000, CRC(1e3523e8) SHA1(cb3d0d389fcbfb728fad29cfc36ef654d28d553a) )
2836   ROM_LOAD( "5gp1wavel.2c", 0x000000, 0x800000, CRC(aa634cc2) SHA1(e96f5c682039bc6ef22bf90e98f4da78486bd2b1) )
2837   ROM_LOAD( "5gp1waveh.2a", 0x800000, 0x800000, CRC(1e3523e8) SHA1(cb3d0d389fcbfb728fad29cfc36ef654d28d553a) )
27282838ROM_END
27292839
27302840ROM_START( finfurl2 )
27312841   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2732        ROM_LOAD16_BYTE( "29f016.ic2",   0x000000, 0x200000, CRC(13cbc545) SHA1(3e67a7bfbb1c1374e8e3996a0c09e4861b0dca14) )
2733        ROM_LOAD16_BYTE( "29f016.ic1",   0x000001, 0x200000, CRC(5b04e4f2) SHA1(8099fc3deab9ed14a2484a774666fbd928330de8) )
2842   ROM_LOAD16_BYTE( "29f016.ic2",   0x000000, 0x200000, CRC(13cbc545) SHA1(3e67a7bfbb1c1374e8e3996a0c09e4861b0dca14) )
2843   ROM_LOAD16_BYTE( "29f016.ic1",   0x000001, 0x200000, CRC(5b04e4f2) SHA1(8099fc3deab9ed14a2484a774666fbd928330de8) )
27342844
27352845   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2736        ROM_LOAD16_WORD_SWAP( "m29f400.ic3",  0x000000, 0x080000, CRC(9fd69bbd) SHA1(53a9bf505de70495dcccc43fdc722b3381aad97c) )
2846   ROM_LOAD16_WORD_SWAP( "m29f400.ic3",  0x000000, 0x080000, CRC(9fd69bbd) SHA1(53a9bf505de70495dcccc43fdc722b3381aad97c) )
27372847
27382848   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
2739        ROM_LOAD( "asca-3a.ic14", 0x000000, 0x040000, CRC(8e9266e5) SHA1(ffa8782ca641d71d57df23ed1c5911db05d3df97) )
2849   ROM_LOAD( "asca-3a.ic14", 0x000000, 0x040000, CRC(8e9266e5) SHA1(ffa8782ca641d71d57df23ed1c5911db05d3df97) )
27402850
27412851   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2742        ROM_LOAD16_BYTE( "ffs1mtah.2j",  0x0000000, 0x800000, CRC(f336d81d) SHA1(a9177091e1412dea1b6ea6c53530ae31361b32d0) )
2743        ROM_LOAD16_BYTE( "ffs1mtal.2h",  0x0000001, 0x800000, CRC(98730ad5) SHA1(9ba276ad88ec8730edbacab80cdacc34a99593e4) )
2744        ROM_LOAD16_BYTE( "ffs1mtbh.2m",  0x1000000, 0x800000, CRC(0f42c93b) SHA1(26b313fc5c33afb0a1ee42243486e38f052c95c2) )
2745        ROM_LOAD16_BYTE( "ffs1mtbl.2f",  0x1000001, 0x800000, CRC(0abc9e50) SHA1(be5e5e2b637811c59804ef9442c6da5a5a1315e2) )
2852   ROM_LOAD16_BYTE( "ffs1mtah.2j",  0x0000000, 0x800000, CRC(f336d81d) SHA1(a9177091e1412dea1b6ea6c53530ae31361b32d0) )
2853   ROM_LOAD16_BYTE( "ffs1mtal.2h",  0x0000001, 0x800000, CRC(98730ad5) SHA1(9ba276ad88ec8730edbacab80cdacc34a99593e4) )
2854   ROM_LOAD16_BYTE( "ffs1mtbh.2m",  0x1000000, 0x800000, CRC(0f42c93b) SHA1(26b313fc5c33afb0a1ee42243486e38f052c95c2) )
2855   ROM_LOAD16_BYTE( "ffs1mtbl.2f",  0x1000001, 0x800000, CRC(0abc9e50) SHA1(be5e5e2b637811c59804ef9442c6da5a5a1315e2) )
27462856
27472857   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2748        ROM_LOAD( "ffs1cguu.4f",  0x0000000, 0x800000, CRC(52c0a19f) SHA1(e6b4b90ff88da09cb2e653e450e7ae66942a719e) )
2749        ROM_LOAD( "ffs1cgum.4j",  0x0800000, 0x800000, CRC(77447199) SHA1(1eeae30b3dd1ac467bdbbdfe4be36ca0f0816496) )
2750        ROM_LOAD( "ffs1cgll.4m",  0x1000000, 0x800000, CRC(171bba76) SHA1(4a63a1f34de8f341a0ef9b499a21e8fec758e1cd) )
2751        ROM_LOAD( "ffs1cglm.4k",  0x1800000, 0x800000, CRC(48acf207) SHA1(ea902efdd94aba34dadb20762219d2d25441d199) )
2858   ROM_LOAD( "ffs1cgll.4m",  0x0000000, 0x800000, CRC(171bba76) SHA1(4a63a1f34de8f341a0ef9b499a21e8fec758e1cd) )
2859   ROM_LOAD( "ffs1cglm.4k",  0x0800000, 0x800000, CRC(48acf207) SHA1(ea902efdd94aba34dadb20762219d2d25441d199) )
2860   ROM_LOAD( "ffs1cgum.4j",  0x1000000, 0x800000, CRC(77447199) SHA1(1eeae30b3dd1ac467bdbbdfe4be36ca0f0816496) )
2861   ROM_LOAD( "ffs1cguu.4f",  0x1800000, 0x800000, CRC(52c0a19f) SHA1(e6b4b90ff88da09cb2e653e450e7ae66942a719e) )
27522862
2753   ROM_REGION( 0x400000, "textilemap", 0 )   /* texture tilemap */
2754        ROM_LOAD( "ffs1ccrl.7f",  0x000000, 0x200000, CRC(ffbcfec1) SHA1(9ab25f1543da4b72784eec93985abaa2e1dafc83) )
2755        ROM_LOAD( "ffs1ccrh.7e",  0x200000, 0x200000, CRC(8be4aeb4) SHA1(ec344f6fba42092083e737e436451f5d7be12c15) )
2863   ROM_REGION16_LE( 0x200000, "textilemapl", 0 )   /* texture tilemap 0-15*/
2864   ROM_LOAD( "ffs1ccrl.7f",  0x000000, 0x200000, CRC(ffbcfec1) SHA1(9ab25f1543da4b72784eec93985abaa2e1dafc83) )
27562865
2866   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2867   ROM_LOAD( "ffs1ccrh.7e",  0x000000, 0x200000, CRC(8be4aeb4) SHA1(ec344f6fba42092083e737e436451f5d7be12c15) )
2868
27572869   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2758        ROM_LOAD32_WORD( "ffs1pt0l.7c",  0x0000000, 0x400000, CRC(383cbfba) SHA1(0784ac2d709bee6653c95f80fedf7f98ca79357f) )
2759        ROM_LOAD32_WORD( "ffs1pt0h.7a",  0x0000002, 0x400000, CRC(79b9b019) SHA1(ca2bbabd949fec91001a30b63f7343520028cde0) )
2760        ROM_LOAD32_WORD( "ffs1pt1l.5c",  0x0800000, 0x400000, CRC(ba0fff5b) SHA1(d5a6db4de60657d46228e85ed09ed7f0ecbc7975) )
2761        ROM_LOAD32_WORD( "ffs1pt1h.5a",  0x0800002, 0x400000, CRC(2dba59d0) SHA1(34d4c415b5635338511ff3578eb3c00e2b6cd7d4) )
2762        ROM_LOAD32_WORD( "ffs1pt2l.4c",  0x1000000, 0x400000, CRC(c5199c1b) SHA1(8f1a70c8edb2791a099b4911353af6250a5d0e8a) )
2763        ROM_LOAD32_WORD( "ffs1pt2h.4a",  0x1000002, 0x400000, CRC(26ea01e8) SHA1(9af096c99e6835e21b1b78dfce07040f50f8c922) )
2764        ROM_LOAD32_WORD( "ffs1pt3l.3c",  0x1800000, 0x400000, CRC(2381611a) SHA1(a3d948bf910dcfd9f47c65c56b9920f58c42fed5) )
2765        ROM_LOAD32_WORD( "ffs1pt3h.3a",  0x1800002, 0x400000, CRC(48226e9f) SHA1(f099b2929d49903a33b4dab80972c3ce0ddb6ca2) )
2870   ROM_LOAD32_WORD_SWAP( "ffs1pt0h.7a",  0x0000000, 0x400000, CRC(79b9b019) SHA1(ca2bbabd949fec91001a30b63f7343520028cde0) )
2871   ROM_LOAD32_WORD_SWAP( "ffs1pt0l.7c",  0x0000002, 0x400000, CRC(383cbfba) SHA1(0784ac2d709bee6653c95f80fedf7f98ca79357f) )
2872   ROM_LOAD32_WORD_SWAP( "ffs1pt1h.5a",  0x0800000, 0x400000, CRC(2dba59d0) SHA1(34d4c415b5635338511ff3578eb3c00e2b6cd7d4) )
2873   ROM_LOAD32_WORD_SWAP( "ffs1pt1l.5c",  0x0800002, 0x400000, CRC(ba0fff5b) SHA1(d5a6db4de60657d46228e85ed09ed7f0ecbc7975) )
2874   ROM_LOAD32_WORD_SWAP( "ffs1pt2h.4a",  0x1000000, 0x400000, CRC(26ea01e8) SHA1(9af096c99e6835e21b1b78dfce07040f50f8c922) )
2875   ROM_LOAD32_WORD_SWAP( "ffs1pt2l.4c",  0x1000002, 0x400000, CRC(c5199c1b) SHA1(8f1a70c8edb2791a099b4911353af6250a5d0e8a) )
2876   ROM_LOAD32_WORD_SWAP( "ffs1pt3h.3a",  0x1800000, 0x400000, CRC(48226e9f) SHA1(f099b2929d49903a33b4dab80972c3ce0ddb6ca2) )
2877   ROM_LOAD32_WORD_SWAP( "ffs1pt3l.3c",  0x1800002, 0x400000, CRC(2381611a) SHA1(a3d948bf910dcfd9f47c65c56b9920f58c42fed5) )
27662878
27672879   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2768        ROM_LOAD( "ffs1wavel.2c", 0x000000, 0x800000, CRC(67ba16cf) SHA1(00b38617c2185b9a3bf279962ad0c21a7287256f) )
2769        ROM_LOAD( "ffs1waveh.2a", 0x800000, 0x800000, CRC(178e8bd3) SHA1(8ab1a97003914f70b09e96c5924f3a839fe634c7) )
2880   ROM_LOAD( "ffs1wavel.2c", 0x000000, 0x800000, CRC(67ba16cf) SHA1(00b38617c2185b9a3bf279962ad0c21a7287256f) )
2881   ROM_LOAD( "ffs1waveh.2a", 0x800000, 0x800000, CRC(178e8bd3) SHA1(8ab1a97003914f70b09e96c5924f3a839fe634c7) )
27702882ROM_END
27712883
27722884ROM_START( finfurl2j )
27732885   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2774        ROM_LOAD16_BYTE( "29f016_jap1.ic2", 0x000000, 0x200000, CRC(0215125d) SHA1(a99f601441c152b0b00f4811e5752c71897b1ed4) )
2775        ROM_LOAD16_BYTE( "29f016_jap1.ic1", 0x000001, 0x200000, CRC(38c9ae96) SHA1(b50afc7276662267ff6460f82d0e5e8b00b341ea) )
2886   ROM_LOAD16_BYTE( "29f016_jap1.ic2", 0x000000, 0x200000, CRC(0215125d) SHA1(a99f601441c152b0b00f4811e5752c71897b1ed4) )
2887   ROM_LOAD16_BYTE( "29f016_jap1.ic1", 0x000001, 0x200000, CRC(38c9ae96) SHA1(b50afc7276662267ff6460f82d0e5e8b00b341ea) )
27762888
27772889   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2778        ROM_LOAD16_WORD_SWAP( "m29f400.ic3",  0x000000, 0x080000, CRC(9fd69bbd) SHA1(53a9bf505de70495dcccc43fdc722b3381aad97c) )
2890   ROM_LOAD16_WORD_SWAP( "m29f400.ic3",  0x000000, 0x080000, CRC(9fd69bbd) SHA1(53a9bf505de70495dcccc43fdc722b3381aad97c) )
27792891
27802892   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
2781        ROM_LOAD( "asca-3a.ic14", 0x000000, 0x040000, CRC(8e9266e5) SHA1(ffa8782ca641d71d57df23ed1c5911db05d3df97) )
2893   ROM_LOAD( "asca-3a.ic14", 0x000000, 0x040000, CRC(8e9266e5) SHA1(ffa8782ca641d71d57df23ed1c5911db05d3df97) )
27822894
27832895   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2784        ROM_LOAD16_BYTE( "ffs1mtah.2j",  0x0000000, 0x800000, CRC(f336d81d) SHA1(a9177091e1412dea1b6ea6c53530ae31361b32d0) )
2785        ROM_LOAD16_BYTE( "ffs1mtal.2h",  0x0000001, 0x800000, CRC(98730ad5) SHA1(9ba276ad88ec8730edbacab80cdacc34a99593e4) )
2786        ROM_LOAD16_BYTE( "ffs1mtbh.2m",  0x1000000, 0x800000, CRC(0f42c93b) SHA1(26b313fc5c33afb0a1ee42243486e38f052c95c2) )
2787        ROM_LOAD16_BYTE( "ffs1mtbl.2f",  0x1000001, 0x800000, CRC(0abc9e50) SHA1(be5e5e2b637811c59804ef9442c6da5a5a1315e2) )
2896   ROM_LOAD16_BYTE( "ffs1mtah.2j",  0x0000000, 0x800000, CRC(f336d81d) SHA1(a9177091e1412dea1b6ea6c53530ae31361b32d0) )
2897   ROM_LOAD16_BYTE( "ffs1mtal.2h",  0x0000001, 0x800000, CRC(98730ad5) SHA1(9ba276ad88ec8730edbacab80cdacc34a99593e4) )
2898   ROM_LOAD16_BYTE( "ffs1mtbh.2m",  0x1000000, 0x800000, CRC(0f42c93b) SHA1(26b313fc5c33afb0a1ee42243486e38f052c95c2) )
2899   ROM_LOAD16_BYTE( "ffs1mtbl.2f",  0x1000001, 0x800000, CRC(0abc9e50) SHA1(be5e5e2b637811c59804ef9442c6da5a5a1315e2) )
27882900
27892901   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2790        ROM_LOAD( "ffs1cguu.4f",  0x0000000, 0x800000, CRC(52c0a19f) SHA1(e6b4b90ff88da09cb2e653e450e7ae66942a719e) )
2791        ROM_LOAD( "ffs1cgum.4j",  0x0800000, 0x800000, CRC(77447199) SHA1(1eeae30b3dd1ac467bdbbdfe4be36ca0f0816496) )
2792        ROM_LOAD( "ffs1cgll.4m",  0x1000000, 0x800000, CRC(171bba76) SHA1(4a63a1f34de8f341a0ef9b499a21e8fec758e1cd) )
2793        ROM_LOAD( "ffs1cglm.4k",  0x1800000, 0x800000, CRC(48acf207) SHA1(ea902efdd94aba34dadb20762219d2d25441d199) )
2902   ROM_LOAD( "ffs1cgll.4m",  0x0000000, 0x800000, CRC(171bba76) SHA1(4a63a1f34de8f341a0ef9b499a21e8fec758e1cd) )
2903   ROM_LOAD( "ffs1cglm.4k",  0x0800000, 0x800000, CRC(48acf207) SHA1(ea902efdd94aba34dadb20762219d2d25441d199) )
2904   ROM_LOAD( "ffs1cgum.4j",  0x1000000, 0x800000, CRC(77447199) SHA1(1eeae30b3dd1ac467bdbbdfe4be36ca0f0816496) )
2905   ROM_LOAD( "ffs1cguu.4f",  0x1800000, 0x800000, CRC(52c0a19f) SHA1(e6b4b90ff88da09cb2e653e450e7ae66942a719e) )
27942906
2795   ROM_REGION( 0x400000, "textilemap", 0 )   /* texture tilemap */
2796        ROM_LOAD( "ffs1ccrl.7f",  0x000000, 0x200000, CRC(ffbcfec1) SHA1(9ab25f1543da4b72784eec93985abaa2e1dafc83) )
2797        ROM_LOAD( "ffs1ccrh.7e",  0x200000, 0x200000, CRC(8be4aeb4) SHA1(ec344f6fba42092083e737e436451f5d7be12c15) )
2907   ROM_REGION16_LE( 0x200000, "textilemapl", 0 )   /* texture tilemap 0-15*/
2908   ROM_LOAD( "ffs1ccrl.7f",  0x000000, 0x200000, CRC(ffbcfec1) SHA1(9ab25f1543da4b72784eec93985abaa2e1dafc83) )
27982909
2910   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2911   ROM_LOAD( "ffs1ccrh.7e",  0x000000, 0x200000, CRC(8be4aeb4) SHA1(ec344f6fba42092083e737e436451f5d7be12c15) )
2912
27992913   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2800        ROM_LOAD32_WORD( "ffs1pt0l.7c",  0x0000000, 0x400000, CRC(383cbfba) SHA1(0784ac2d709bee6653c95f80fedf7f98ca79357f) )
2801        ROM_LOAD32_WORD( "ffs1pt0h.7a",  0x0000002, 0x400000, CRC(79b9b019) SHA1(ca2bbabd949fec91001a30b63f7343520028cde0) )
2802        ROM_LOAD32_WORD( "ffs1pt1l.5c",  0x0800000, 0x400000, CRC(ba0fff5b) SHA1(d5a6db4de60657d46228e85ed09ed7f0ecbc7975) )
2803        ROM_LOAD32_WORD( "ffs1pt1h.5a",  0x0800002, 0x400000, CRC(2dba59d0) SHA1(34d4c415b5635338511ff3578eb3c00e2b6cd7d4) )
2804        ROM_LOAD32_WORD( "ffs1pt2l.4c",  0x1000000, 0x400000, CRC(c5199c1b) SHA1(8f1a70c8edb2791a099b4911353af6250a5d0e8a) )
2805        ROM_LOAD32_WORD( "ffs1pt2h.4a",  0x1000002, 0x400000, CRC(26ea01e8) SHA1(9af096c99e6835e21b1b78dfce07040f50f8c922) )
2806        ROM_LOAD32_WORD( "ffs1pt3l.3c",  0x1800000, 0x400000, CRC(2381611a) SHA1(a3d948bf910dcfd9f47c65c56b9920f58c42fed5) )
2807        ROM_LOAD32_WORD( "ffs1pt3h.3a",  0x1800002, 0x400000, CRC(48226e9f) SHA1(f099b2929d49903a33b4dab80972c3ce0ddb6ca2) )
2808
2914   ROM_LOAD32_WORD_SWAP( "ffs1pt0h.7a",  0x0000000, 0x400000, CRC(79b9b019) SHA1(ca2bbabd949fec91001a30b63f7343520028cde0) )
2915   ROM_LOAD32_WORD_SWAP( "ffs1pt0l.7c",  0x0000002, 0x400000, CRC(383cbfba) SHA1(0784ac2d709bee6653c95f80fedf7f98ca79357f) )
2916   ROM_LOAD32_WORD_SWAP( "ffs1pt1h.5a",  0x0800000, 0x400000, CRC(2dba59d0) SHA1(34d4c415b5635338511ff3578eb3c00e2b6cd7d4) )
2917   ROM_LOAD32_WORD_SWAP( "ffs1pt1l.5c",  0x0800002, 0x400000, CRC(ba0fff5b) SHA1(d5a6db4de60657d46228e85ed09ed7f0ecbc7975) )
2918   ROM_LOAD32_WORD_SWAP( "ffs1pt2h.4a",  0x1000000, 0x400000, CRC(26ea01e8) SHA1(9af096c99e6835e21b1b78dfce07040f50f8c922) )
2919   ROM_LOAD32_WORD_SWAP( "ffs1pt2l.4c",  0x1000002, 0x400000, CRC(c5199c1b) SHA1(8f1a70c8edb2791a099b4911353af6250a5d0e8a) )
2920   ROM_LOAD32_WORD_SWAP( "ffs1pt3h.3a",  0x1800000, 0x400000, CRC(48226e9f) SHA1(f099b2929d49903a33b4dab80972c3ce0ddb6ca2) )
2921   ROM_LOAD32_WORD_SWAP( "ffs1pt3l.3c",  0x1800002, 0x400000, CRC(2381611a) SHA1(a3d948bf910dcfd9f47c65c56b9920f58c42fed5) )
28092922   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2810        ROM_LOAD( "ffs1wavel.2c", 0x000000, 0x800000, CRC(67ba16cf) SHA1(00b38617c2185b9a3bf279962ad0c21a7287256f) )
2811        ROM_LOAD( "ffs1waveh.2a", 0x800000, 0x800000, CRC(178e8bd3) SHA1(8ab1a97003914f70b09e96c5924f3a839fe634c7) )
2923   ROM_LOAD( "ffs1wavel.2c", 0x000000, 0x800000, CRC(67ba16cf) SHA1(00b38617c2185b9a3bf279962ad0c21a7287256f) )
2924   ROM_LOAD( "ffs1waveh.2a", 0x800000, 0x800000, CRC(178e8bd3) SHA1(8ab1a97003914f70b09e96c5924f3a839fe634c7) )
28122925ROM_END
28132926
28142927ROM_START( panicprk )
28152928   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
2816        ROM_LOAD16_BYTE( "pnp2ver-a.ic2", 0x000000, 0x200000, CRC(cd528597) SHA1(cf390e78228eb10d5f50ff7e7e37063a2d87f469) )
2817        ROM_LOAD16_BYTE( "pnp2ver-a.ic1", 0x000001, 0x200000, CRC(80fea853) SHA1(b18003bde060ebb3c892a6d7fa4abf868cadc777) )
2929   ROM_LOAD16_BYTE( "pnp2ver-a.ic2", 0x000000, 0x200000, CRC(cd528597) SHA1(cf390e78228eb10d5f50ff7e7e37063a2d87f469) )
2930   ROM_LOAD16_BYTE( "pnp2ver-a.ic1", 0x000001, 0x200000, CRC(80fea853) SHA1(b18003bde060ebb3c892a6d7fa4abf868cadc777) )
28182931
28192932   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
2820        ROM_LOAD16_WORD_SWAP( "pnp2ver-a.ic3", 0x000000, 0x080000, CRC(fe4bc6f4) SHA1(2114dc4bc63d589e6c3b26a73dbc60924f3b1765) )
2933   ROM_LOAD16_WORD_SWAP( "pnp2ver-a.ic3", 0x000000, 0x080000, CRC(fe4bc6f4) SHA1(2114dc4bc63d589e6c3b26a73dbc60924f3b1765) )
28212934
28222935   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code */
28232936   ROM_LOAD( "asca-3a.ic14", 0x000000, 0x040000, CRC(8e9266e5) SHA1(ffa8782ca641d71d57df23ed1c5911db05d3df97) )
28242937
28252938   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2826        ROM_LOAD16_BYTE( "pnp1mtah.2j",  0x000000, 0x800000, CRC(37addddd) SHA1(3032989653304417df80606bc3fde6e9425d8cbb) )
2827        ROM_LOAD16_BYTE( "pnp1mtal.2h",  0x000001, 0x800000, CRC(6490faaa) SHA1(03443746009b434e5d4074ea6314910418907360) )
2939   ROM_LOAD16_BYTE( "pnp1mtah.2j",  0x000000, 0x800000, CRC(37addddd) SHA1(3032989653304417df80606bc3fde6e9425d8cbb) )
2940   ROM_LOAD16_BYTE( "pnp1mtal.2h",  0x000001, 0x800000, CRC(6490faaa) SHA1(03443746009b434e5d4074ea6314910418907360) )
28282941
2829   ROM_REGION( 0x4000000, "textile", 0 )   /* texture tiles */
2830        ROM_LOAD( "pnp1cguu.5f",  0x0000000, 0x800000, CRC(cd64f57f) SHA1(8780270298e0823db1acbbf79396788df0c3c19c) )
2831        ROM_LOAD( "pnp1cgum.4j",  0x0800000, 0x800000, CRC(206217ca) SHA1(9c095bba7764f3405c3fab10513b9b78981ec44d) )
2832        ROM_LOAD( "pnp1cgll.4m",  0x1000000, 0x800000, CRC(d03932cf) SHA1(49240e44923cc6e815e9457b6290fd18466658af) )
2833        ROM_LOAD( "pnp1cglm.5k",  0x1800000, 0x800000, CRC(abf4ccf2) SHA1(3848e26d0ba6c872bbc6d5e0eb23a9d4b34152d5) )
2834        ROM_LOAD( "pnp1cguu.4f",  0x2000000, 0x800000, CRC(cd64f57f) SHA1(8780270298e0823db1acbbf79396788df0c3c19c) )
2835        ROM_LOAD( "pnp1cgum.5j",  0x2800000, 0x800000, CRC(206217ca) SHA1(9c095bba7764f3405c3fab10513b9b78981ec44d) )
2836        ROM_LOAD( "pnp1cgll.5m",  0x3000000, 0x800000, CRC(d03932cf) SHA1(49240e44923cc6e815e9457b6290fd18466658af) )
2837        ROM_LOAD( "pnp1cglm.4k",  0x3800000, 0x800000, CRC(abf4ccf2) SHA1(3848e26d0ba6c872bbc6d5e0eb23a9d4b34152d5) )
2942   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2943   ROM_LOAD( "pnp1cgll.4m",  0x0000000, 0x800000, CRC(d03932cf) SHA1(49240e44923cc6e815e9457b6290fd18466658af) )
2944   ROM_LOAD( "pnp1cglm.5k",  0x0800000, 0x800000, CRC(abf4ccf2) SHA1(3848e26d0ba6c872bbc6d5e0eb23a9d4b34152d5) )
2945   ROM_LOAD( "pnp1cgum.4j",  0x1000000, 0x800000, CRC(206217ca) SHA1(9c095bba7764f3405c3fab10513b9b78981ec44d) )
2946   ROM_LOAD( "pnp1cguu.5f",  0x1800000, 0x800000, CRC(cd64f57f) SHA1(8780270298e0823db1acbbf79396788df0c3c19c) )
28382947
2839   ROM_REGION( 0x800000, "textilemap", 0 )   /* texture tilemap */
2840        ROM_LOAD( "pnp1ccrl.7f",  0x000000, 0x200000, CRC(b7bc43c2) SHA1(f4b470540194486ca6822f438fc1d4700cfb2ab1) )
2841        ROM_LOAD( "pnp1ccrh.7e",  0x200000, 0x200000, CRC(caaf1b73) SHA1(b436992817ab4e4dad05e7429eb102d4fb57fa6a) )
2842        ROM_LOAD( "pnp1ccrl.7m",  0x400000, 0x200000, CRC(b7bc43c2) SHA1(f4b470540194486ca6822f438fc1d4700cfb2ab1) )
2843        ROM_LOAD( "pnp1ccrh.7k",  0x600000, 0x200000, CRC(caaf1b73) SHA1(b436992817ab4e4dad05e7429eb102d4fb57fa6a) )
2948   ROM_REGION16_LE( 0x200000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2949   ROM_LOAD( "pnp1ccrl.7f",  0x000000, 0x200000, CRC(b7bc43c2) SHA1(f4b470540194486ca6822f438fc1d4700cfb2ab1) )
28442950
2845   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2846        ROM_LOAD32_WORD( "pnp1pt0l.7c",  0x000000, 0x400000, CRC(26af5fa1) SHA1(12fcf98c2a59643e0fdfdd7186f9f16baf54a9cf) )
2847        ROM_LOAD32_WORD( "pnp1pt0h.7a",  0x000002, 0x400000, CRC(43fc2246) SHA1(301d321cd4a01ebd7ccfa6f295d6c3daf0a19efe) )
2848        ROM_LOAD32_WORD( "pnp1pt1l.5c",  0x800000, 0x400000, CRC(15c6f236) SHA1(e8c393359a91cdce6e9110a48c0a80708f8fc132) )
2849        ROM_LOAD32_WORD( "pnp1pt1h.5a",  0x800002, 0x400000, CRC(1ff470c0) SHA1(ca8fad90743589744939d681b0ce94f368337b3f) )
2951   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2952   ROM_LOAD( "pnp1ccrh.7e",  0x000000, 0x200000, CRC(caaf1b73) SHA1(b436992817ab4e4dad05e7429eb102d4fb57fa6a) )
28502953
2954   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2955   ROM_LOAD32_WORD_SWAP( "pnp1pt0h.7a",  0x000000, 0x400000, CRC(43fc2246) SHA1(301d321cd4a01ebd7ccfa6f295d6c3daf0a19efe) )
2956   ROM_LOAD32_WORD_SWAP( "pnp1pt0l.7c",  0x000002, 0x400000, CRC(26af5fa1) SHA1(12fcf98c2a59643e0fdfdd7186f9f16baf54a9cf) )
2957   ROM_LOAD32_WORD_SWAP( "pnp1pt1h.5a",  0x800000, 0x400000, CRC(1ff470c0) SHA1(ca8fad90743589744939d681b0ce94f368337b3f) )
2958   ROM_LOAD32_WORD_SWAP( "pnp1pt1l.5c",  0x800002, 0x400000, CRC(15c6f236) SHA1(e8c393359a91cdce6e9110a48c0a80708f8fc132) )
2959
28512960   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
2852        ROM_LOAD( "pnp1wavel.2c", 0x000000, 0x800000, CRC(35c6a9bd) SHA1(4b56fdc37525c15e57d93091e6609d6a6905fc5c) )
2853        ROM_LOAD( "pnp1waveh.2a", 0x800000, 0x800000, CRC(6fa1826a) SHA1(20a5af49e65ae2bc57c016b5cd9bafa5a5220d35) )
2961   ROM_LOAD( "pnp1wavel.2c", 0x000000, 0x800000, CRC(35c6a9bd) SHA1(4b56fdc37525c15e57d93091e6609d6a6905fc5c) )
2962   ROM_LOAD( "pnp1waveh.2a", 0x800000, 0x800000, CRC(6fa1826a) SHA1(20a5af49e65ae2bc57c016b5cd9bafa5a5220d35) )
2963
2964   ROM_REGION( 0x800000, "dups", 0 )   /* duplicate roms */
2965   ROM_LOAD( "pnp1cguu.4f",  0x000000, 0x800000, CRC(cd64f57f) SHA1(8780270298e0823db1acbbf79396788df0c3c19c) )
2966   ROM_LOAD( "pnp1cgum.5j",  0x000000, 0x800000, CRC(206217ca) SHA1(9c095bba7764f3405c3fab10513b9b78981ec44d) )
2967   ROM_LOAD( "pnp1cgll.5m",  0x000000, 0x800000, CRC(d03932cf) SHA1(49240e44923cc6e815e9457b6290fd18466658af) )
2968   ROM_LOAD( "pnp1cglm.4k",  0x000000, 0x800000, CRC(abf4ccf2) SHA1(3848e26d0ba6c872bbc6d5e0eb23a9d4b34152d5) )
2969   ROM_LOAD( "pnp1ccrl.7m",  0x000000, 0x200000, CRC(b7bc43c2) SHA1(f4b470540194486ca6822f438fc1d4700cfb2ab1) )
2970   ROM_LOAD( "pnp1ccrh.7k",  0x000000, 0x200000, CRC(caaf1b73) SHA1(b436992817ab4e4dad05e7429eb102d4fb57fa6a) )
28542971ROM_END
28552972
28562973ROM_START( gunwars )
r7640r7641
28652982   ROM_LOAD( "asc5_io-a.ic14", 0x000000, 0x020000, CRC(5964767f) SHA1(320db5e78ae23c5f94e368432d51573b409995db) )
28662983
28672984   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
2868        ROM_LOAD16_BYTE( "gm1mtah.2j",   0x000000, 0x800000, CRC(3cea9094) SHA1(497395425e409de47e1114de9aeeaf05e4f6a9a1) )
2869        ROM_LOAD16_BYTE( "gm1mtal.2h",   0x000001, 0x800000, CRC(d531dfcd) SHA1(9f7cbe9a03c1f7649bf05a7a30d47511573b50ba) )
2985   ROM_LOAD16_BYTE( "gm1mtah.2j",   0x000000, 0x800000, CRC(3cea9094) SHA1(497395425e409de47e1114de9aeeaf05e4f6a9a1) )
2986   ROM_LOAD16_BYTE( "gm1mtal.2h",   0x000001, 0x800000, CRC(d531dfcd) SHA1(9f7cbe9a03c1f7649bf05a7a30d47511573b50ba) )
28702987
2871   ROM_REGION( 0x4000000, "textile", 0 )   /* texture tiles */
2872        ROM_LOAD( "gm1cguu.5f",   0x0000000, 0x800000, CRC(26a74698) SHA1(3f07d273abb3f2552dc6a29300f5dc2f2744c852) )
2873        ROM_LOAD( "gm1cgum.4j",   0x0800000, 0x800000, CRC(a7728944) SHA1(c187c6d66128554fcecc96e81d4f5396197e8280) )
2874        ROM_LOAD( "gm1cgll.4m",   0x1000000, 0x800000, CRC(936c0079) SHA1(3aec8caada35b7ed790bb3a8bcf6e01cad068fcd) )
2875        ROM_LOAD( "gm1cglm.4k",   0x1800000, 0x800000, CRC(e2ee5493) SHA1(1ffd74646796ad554d7967ba9fc18deab4fedadf) )
2988   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
2989   ROM_LOAD( "gm1cgll.4m",   0x0000000, 0x800000, CRC(936c0079) SHA1(3aec8caada35b7ed790bb3a8bcf6e01cad068fcd) )
2990   ROM_LOAD( "gm1cglm.4k",   0x0800000, 0x800000, CRC(e2ee5493) SHA1(1ffd74646796ad554d7967ba9fc18deab4fedadf) )
2991   ROM_LOAD( "gm1cgum.4j",   0x1000000, 0x800000, CRC(a7728944) SHA1(c187c6d66128554fcecc96e81d4f5396197e8280) )
2992   ROM_LOAD( "gm1cguu.5f",   0x1800000, 0x800000, CRC(26a74698) SHA1(3f07d273abb3f2552dc6a29300f5dc2f2744c852) )
28762993
2877   ROM_REGION( 0x4000000, "textile2", 0 )   /* second copy of texture tiles */
2878        ROM_LOAD( "gm1cguu.4f",   0x0000000, 0x800000, CRC(26a74698) SHA1(3f07d273abb3f2552dc6a29300f5dc2f2744c852) )
2879        ROM_LOAD( "gm1cgum.5j",   0x0800000, 0x800000, CRC(a7728944) SHA1(c187c6d66128554fcecc96e81d4f5396197e8280) )
2880        ROM_LOAD( "gm1cgll.5m",   0x1000000, 0x800000, CRC(936c0079) SHA1(3aec8caada35b7ed790bb3a8bcf6e01cad068fcd) )
2881        ROM_LOAD( "gm1cglm.5k",   0x1800000, 0x800000, CRC(e2ee5493) SHA1(1ffd74646796ad554d7967ba9fc18deab4fedadf) )
2994   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
2995   ROM_LOAD( "gm1ccrl.7f",   0x000000, 0x400000, CRC(2c54c182) SHA1(538dfb04653f8d86f976e702456bf4da97e3fda9) )
28822996
2883   ROM_REGION( 0x800000, "textilemap", 0 )   /* texture tilemap */
2884        ROM_LOAD( "gm1ccrl.7f",   0x000000, 0x400000, CRC(2c54c182) SHA1(538dfb04653f8d86f976e702456bf4da97e3fda9) )
2885        ROM_LOAD( "gm1ccrh.7e",   0x400000, 0x200000, CRC(8563ef01) SHA1(59f09a08008a71a4bb12bd43a1b5dbe633d3061d) )
2997   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
2998   ROM_LOAD( "gm1ccrh.7e",   0x000000, 0x200000, CRC(8563ef01) SHA1(59f09a08008a71a4bb12bd43a1b5dbe633d3061d) )
28862999
2887   ROM_REGION( 0x800000, "textilemap2", 0 )   /* second copy of texture tilemap */
2888        ROM_LOAD( "gm1ccrl.7m",   0x000000, 0x400000, CRC(2c54c182) SHA1(538dfb04653f8d86f976e702456bf4da97e3fda9) )
2889        ROM_LOAD( "gm1ccrh.7k",   0x400000, 0x200000, CRC(8563ef01) SHA1(59f09a08008a71a4bb12bd43a1b5dbe633d3061d) )
3000   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
3001   ROM_LOAD32_WORD_SWAP( "gm1pt0h.7a",   0x000000, 0x400000, CRC(5ebd658c) SHA1(9e7b89a726b11b6da3327d72ec6adcc30fbb384d) )
3002   ROM_LOAD32_WORD_SWAP( "gm1pt0l.7c",   0x000002, 0x400000, CRC(62e9bedb) SHA1(7043c5e6f26139c9e6e18d4f35fac6a16d4dabd1) )
3003   ROM_LOAD32_WORD_SWAP( "gm1pt1h.5a",   0x800000, 0x400000, CRC(5f6cebab) SHA1(95bd30d30ea25509b66a107fb255d0af1e6a357e) )
3004   ROM_LOAD32_WORD_SWAP( "gm1pt1l.5c",   0x800002, 0x400000, CRC(f44c149f) SHA1(9f995de02ea6ac35ccbabbba5bb473a10e1ec667) )
28903005
2891   ROM_REGION32_LE( 0x2000000, "pointrom", 0 )   /* 3D model data */
2892        ROM_LOAD32_WORD( "gm1pt0l.7c",   0x000000, 0x400000, CRC(62e9bedb) SHA1(7043c5e6f26139c9e6e18d4f35fac6a16d4dabd1) )
2893        ROM_LOAD32_WORD( "gm1pt0h.7a",   0x000002, 0x400000, CRC(5ebd658c) SHA1(9e7b89a726b11b6da3327d72ec6adcc30fbb384d) )
2894        ROM_LOAD32_WORD( "gm1pt1l.5c",   0x800000, 0x400000, CRC(f44c149f) SHA1(9f995de02ea6ac35ccbabbba5bb473a10e1ec667) )
2895        ROM_LOAD32_WORD( "gm1pt1h.5a",   0x800002, 0x400000, CRC(5f6cebab) SHA1(95bd30d30ea25509b66a107fb255d0af1e6a357e) )
3006   ROM_REGION( 0x800000, "c352", 0 ) /* C352 PCM samples */
3007   ROM_LOAD( "gm1wave.2c",   0x000000, 0x800000, CRC(7d5c79a4) SHA1(b800a46bcca10cb0d0d9e0acfa68af63ae64dcaf) )
28963008
2897   ROM_REGION( 0x800000, "c352", 0 ) /* C352 PCM samples */
2898        ROM_LOAD( "gm1wave.2c",   0x000000, 0x800000, CRC(7d5c79a4) SHA1(b800a46bcca10cb0d0d9e0acfa68af63ae64dcaf) )
3009   ROM_REGION( 0x800000, "dups", 0 )   /* duplicate roms */
3010   ROM_LOAD( "gm1cguu.4f",   0x000000, 0x800000, CRC(26a74698) SHA1(3f07d273abb3f2552dc6a29300f5dc2f2744c852) )
3011   ROM_LOAD( "gm1cgum.5j",   0x000000, 0x800000, CRC(a7728944) SHA1(c187c6d66128554fcecc96e81d4f5396197e8280) )
3012   ROM_LOAD( "gm1cgll.5m",   0x000000, 0x800000, CRC(936c0079) SHA1(3aec8caada35b7ed790bb3a8bcf6e01cad068fcd) )
3013   ROM_LOAD( "gm1cglm.5k",   0x000000, 0x800000, CRC(e2ee5493) SHA1(1ffd74646796ad554d7967ba9fc18deab4fedadf) )
3014   ROM_LOAD( "gm1ccrl.7m",   0x000000, 0x400000, CRC(2c54c182) SHA1(538dfb04653f8d86f976e702456bf4da97e3fda9) )
3015   ROM_LOAD( "gm1ccrh.7k",   0x000000, 0x200000, CRC(8563ef01) SHA1(59f09a08008a71a4bb12bd43a1b5dbe633d3061d) )
28993016ROM_END
29003017
3018ROM_START( downhill )
3019   ROM_REGION32_BE( 0x400000, "user1", 0 ) /* 4 megs for main R4650 code */
3020   ROM_LOAD16_BYTE( "dh3vera.ic2",  0x000000, 0x200000, CRC(5d9952e9) SHA1(d38422330bd708c247b9968429fbff36fe706598) )
3021   ROM_LOAD16_BYTE( "dh3vera.ic1",  0x000001, 0x200000, CRC(64a236f3) SHA1(aac59e0db5cfefc4b442e6c3a5189a8418742201) )
3022
3023   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
3024   ROM_LOAD16_WORD_SWAP( "dh3vera.ic3",  0x000000, 0x080000, CRC(98f9fc8b) SHA1(5152b9e11773033a26da11d1f3774a261e61a2c5) )
3025
3026   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code. "ASCA-3;Ver 2.04;JPN,Multipurpose + Rotary Encoder" */
3027   ROM_LOAD( "asc3_io-c.ic14", 0x000000, 0x020000, CRC(2f272a7b) SHA1(9d7ebe274c0d26f5f38747224d42d0375e2ed14c) )
3028
3029   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
3030   ROM_LOAD16_BYTE( "dh1mtah.2j",   0x000000, 0x800000, CRC(3b56faa7) SHA1(861db7f549bedbb2b837516fcc966ad5890007ce) )
3031   ROM_LOAD16_BYTE( "dh1mtal.2h",   0x000001, 0x800000, CRC(9fa07bfe) SHA1(a6b847ff7d5eadbf60b434a0d905051ea4227113) )
3032
3033   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
3034   ROM_LOAD( "dh1cgll.4m",   0x0000000, 0x800000, CRC(c0d5ad87) SHA1(bc1992516c63aebdae0322def77f082d799a327a) )
3035   ROM_LOAD( "dh1cglm.4k",   0x0800000, 0x800000, CRC(5d9a5e35) SHA1(d746abb45f04aa4eb9d43d9c79051e71bf024e38) )
3036   ROM_LOAD( "dh1cgum.4j",   0x1000000, 0x800000, CRC(1044d0a0) SHA1(e0bf843616e166495fcdc76f076eb53a28287d30) )
3037   ROM_LOAD( "dh1cguu.5f",   0x1800000, 0x800000, CRC(66cb0dd7) SHA1(1f67320f150f1b55c97eae4b9fe4890fabc8dc7e) )
3038
3039   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
3040   ROM_LOAD( "dh1ccrl.7f",   0x000000, 0x400000, CRC(65c857df) SHA1(5d67b17cf272f042b4264d9871d6e4088c20b788) )
3041
3042   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
3043   ROM_LOAD( "dh1ccrh.7e",   0x000000, 0x200000, CRC(f21c482d) SHA1(bfcead2ff3d10f996ac0bf81470d050bd6374156) )
3044
3045   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
3046   ROM_LOAD32_WORD_SWAP( "dh1pt0h.7a", 0x0000000, 0x400000, CRC(0e84a5d8) SHA1(28559f978b86d88bb18c3e58e28a97ecfb5f7fa9) )
3047   ROM_LOAD32_WORD_SWAP( "dh1pt0l.7c", 0x0000002, 0x400000, CRC(d120eee5) SHA1(fa1269d891f4e0510491aa70c4abd5f36852e691) )
3048   ROM_LOAD32_WORD_SWAP( "dh1pt1h.5a", 0x0800000, 0x400000, CRC(88cd4c90) SHA1(94016c72a9da983e55c74cbdd3691b596ea50c31) )
3049   ROM_LOAD32_WORD_SWAP( "dh1pt1l.5c", 0x0800002, 0x400000, CRC(dee2f2bf) SHA1(258f9a6e324502550d27b8feaf36244766fa19da) )
3050   ROM_LOAD32_WORD_SWAP( "dh1pt2h.4a", 0x1000000, 0x400000, CRC(7e167c65) SHA1(018bf6aea4c1640ef728cf7b8e491f11742ede0d) )
3051   ROM_LOAD32_WORD_SWAP( "dh1pt2l.4c", 0x1000002, 0x400000, CRC(714e3090) SHA1(39827f645dacbb57c7c40193f3f58e879899a4f3) )
3052
3053   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
3054   ROM_LOAD( "dh1wavel.2c",  0x000000, 0x800000, CRC(10954726) SHA1(50ee0346c46194dada7b5c0d8b1efe9a7f211b90) )
3055   ROM_LOAD( "dh1waveh.2a",  0x800000, 0x800000, CRC(2adfa312) SHA1(d01a46af2c95d1ea64e9778979ae147298d921e3) )
3056
3057   ROM_REGION( 0x800000, "dups", 0 )   /* duplicate roms */
3058   ROM_LOAD( "dh1cguu.4f",   0x000000, 0x800000, CRC(66cb0dd7) SHA1(1f67320f150f1b55c97eae4b9fe4890fabc8dc7e) )
3059   ROM_LOAD( "dh1cgum.5j",   0x000000, 0x800000, CRC(1044d0a0) SHA1(e0bf843616e166495fcdc76f076eb53a28287d30) )
3060   ROM_LOAD( "dh1cgll.5m",   0x000000, 0x800000, CRC(c0d5ad87) SHA1(bc1992516c63aebdae0322def77f082d799a327a) )
3061   ROM_LOAD( "dh1cglm.5k",   0x000000, 0x800000, CRC(5d9a5e35) SHA1(d746abb45f04aa4eb9d43d9c79051e71bf024e38) )
3062   ROM_LOAD( "dh1ccrl.7m",   0x000000, 0x400000, CRC(65c857df) SHA1(5d67b17cf272f042b4264d9871d6e4088c20b788) )
3063   ROM_LOAD( "dh1ccrh.7k",   0x000000, 0x200000, CRC(f21c482d) SHA1(bfcead2ff3d10f996ac0bf81470d050bd6374156) )
3064ROM_END
3065
3066// bfe4b800
3067ROM_START( crszone )
3068   ROM_REGION32_BE( 0x800000, "user1", 0 ) /* 4 megs for main R4650 code */
3069   ROM_LOAD16_WORD_SWAP( "cszo3verb.ic4", 0x400000, 0x400000, CRC(4cb26465) SHA1(078dfd0d8c920707df14e9a26658fa63421fcb0b))
3070   ROM_CONTINUE( 0x000000, 0x400000 )
3071
3072   ROM_REGION( 0x80000, "audiocpu", 0 )   /* Hitachi H8/3002 MCU code */
3073   ROM_LOAD16_WORD_SWAP( "cszo3verb.ic1", 0x000000, 0x080000, CRC(c790743b) SHA1(5fa7b83a7a1b1105a3aa0870b782cf2741b7d11c) )
3074
3075   ROM_REGION( 0x40000, "ioboard", 0 )   /* I/O board HD643334 H8/3334 MCU code. "MIU-I/O;Ver2.05;JPN,GUN-EXTENTION" */
3076   ROM_LOAD( "csz1prg0a.8f", 0x000000, 0x020000, CRC(8edc36b3) SHA1(b5df211988d856572fcc313480e693c8561784e4) )
3077
3078   ROM_REGION32_BE( 0x2000000, "data", 0 )   /* data roms */
3079   ROM_LOAD16_BYTE( "csz1mtah.2j",  0x0000000, 0x800000, CRC(66b076ad) SHA1(edd32e0b380f01a9626d32f5eec860f841c8be8a) )
3080   ROM_LOAD16_BYTE( "csz1mtal.2h",  0x0000001, 0x800000, CRC(38dc639a) SHA1(aa9b5b35174c1b007a57a4bd7a53bc3f479b5b71) )
3081   ROM_LOAD16_BYTE( "csz1mtbh.2m",  0x1000000, 0x800000, CRC(bdec4188) SHA1(a098651fbd8a69a0afc17f4b6c93350926cacd6b) )
3082   ROM_LOAD16_BYTE( "csz1mtbl.2f",  0x1000001, 0x800000, CRC(9c8f8d7a) SHA1(f61bcc9763df15428c82931a605ee40334d5ad98) )
3083
3084   ROM_REGION( 0x2000000, "textile", 0 )   /* texture tiles */
3085   ROM_LOAD( "csz1cgll.4m",  0x0000000, 0x800000, CRC(0bcd41f2) SHA1(80b74f9398e8bd074f79a14490d06cfeb875c874) )
3086   ROM_LOAD( "csz1cglm.4k",  0x0800000, 0x800000, CRC(d4af93d1) SHA1(0df37b793ce8da02d14f714722382786ae5d3ce2) )
3087   ROM_LOAD( "csz1cgum.4j",  0x1000000, 0x800000, CRC(913c98b5) SHA1(b952dbc19053796077d4f33e8da836893e933b12) )
3088   ROM_LOAD( "csz1cguu.5f",  0x1800000, 0x800000, CRC(e1d1bf24) SHA1(daf2c68e2d9a8f313d262d221cc990c93dfdf22f) )
3089
3090   ROM_REGION16_LE( 0x400000, "textilemapl", 0 )   /* texture tilemap 0-15 */
3091   ROM_LOAD( "csz1ccrl.7f",  0x000000, 0x400000, CRC(1c20768d) SHA1(6cf4280e26f3625d6f750837bf344163e7e93c3d) )
3092
3093   ROM_REGION( 0x200000, "textilemaph", 0 )      /* texture tilemap 16-17 + attr */
3094   ROM_LOAD( "csz1ccrh.7e",  0x000000, 0x200000, CRC(bc2fa03c) SHA1(e63d8e75494a383bf9a213edfa9c472a010f8efe) )
3095
3096   ROM_REGION32_BE( 0x2000000, "pointrom", 0 )   /* 3D model data */
3097   ROM_LOAD32_WORD_SWAP( "csz1pt0h.7a",  0x0000000, 0x400000, CRC(e82f1abb) SHA1(b1c57152cc27835e06e429fd1659fe0973638142) )
3098   ROM_LOAD32_WORD_SWAP( "csz1pt0l.7c",  0x0000002, 0x400000, CRC(b0d66afe) SHA1(7cda4eebf1bb1191d17e4b5e616be2fbe4ae9328) )
3099   ROM_LOAD32_WORD_SWAP( "csz1pt1h.5a",  0x0800000, 0x400000, CRC(e54f80ad) SHA1(3b3fbb3001e630d800b02ec8e653d74878ac5116) )
3100   ROM_LOAD32_WORD_SWAP( "csz1pt1l.5c",  0x0800002, 0x400000, CRC(527171c8) SHA1(0b2ce3858f40bdedf1543309a6bc28d780415250) )
3101   ROM_LOAD32_WORD_SWAP( "csz1pt2h.4a",  0x1000000, 0x400000, CRC(e295137a) SHA1(37b18af1b3d9f0e69b45135f89b49a1ceec79127) )
3102   ROM_LOAD32_WORD_SWAP( "csz1pt2l.4c",  0x1000002, 0x400000, CRC(c87d6dbd) SHA1(686f39073c521d6b21ef8bc1161b41b680697c63) )
3103   ROM_LOAD32_WORD_SWAP( "csz1pt3h.3a",  0x1800000, 0x400000, CRC(05f65bdf) SHA1(0c349fe5381fe7aeb81f9365a2b44a212f6bd33e) )
3104   ROM_LOAD32_WORD_SWAP( "csz1pt3l.3c",  0x1800002, 0x400000, CRC(5d077c0f) SHA1(a4fd0167d89bf9417766405726e0334e7c7eaec3) )
3105
3106   ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
3107   ROM_LOAD( "csz1wavel.2c", 0x000000, 0x800000, CRC(d0d74132) SHA1(a293d93bca8e12e388a088a592cfa7bcb9a976f7) )
3108   ROM_LOAD( "csz1waveh.2a", 0x800000, 0x800000, CRC(de9d14a8) SHA1(e5006861928bb1d29bf80c7304f1a6d044b094fd) )
3109
3110   ROM_REGION( 0x800000, "dups", 0 )   /* duplicate roms */
3111   ROM_LOAD( "csz1cguu.4f",  0x000000, 0x800000, CRC(e1d1bf24) SHA1(daf2c68e2d9a8f313d262d221cc990c93dfdf22f) )
3112   ROM_LOAD( "csz1cgum.5j",  0x000000, 0x800000, CRC(913c98b5) SHA1(b952dbc19053796077d4f33e8da836893e933b12) )
3113   ROM_LOAD( "csz1cgll.5m",  0x000000, 0x800000, CRC(0bcd41f2) SHA1(80b74f9398e8bd074f79a14490d06cfeb875c874) )
3114   ROM_LOAD( "csz1cglm.5k",  0x000000, 0x800000, CRC(d4af93d1) SHA1(0df37b793ce8da02d14f714722382786ae5d3ce2) )
3115   ROM_LOAD( "csz1ccrl.7m",  0x000000, 0x400000, CRC(1c20768d) SHA1(6cf4280e26f3625d6f750837bf344163e7e93c3d) )
3116   ROM_LOAD( "csz1ccrh.7k",  0x000000, 0x200000, CRC(bc2fa03c) SHA1(e63d8e75494a383bf9a213edfa9c472a010f8efe) )
3117ROM_END
3118
29013119/* Games */
29023120GAME( 1997, rapidrvr, 0,      gorgon, gorgon, ss23, ROT0, "Namco", "Rapid River (RD3 Ver. C)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
3121GAME( 1997, rapidrvr2,rapidrvr,gorgon,gorgon, ss23, ROT0, "Namco", "Rapid River (RD2 Ver. C)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29033122GAME( 1997, finlflng, 0,      gorgon, gorgon, ss23, ROT0, "Namco", "Final Furlong (FF2 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
3123GAME( 1997, downhill, 0,         s23,    s23, ss23, ROT0, "Namco", "Downhill Bikers (DH3 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29043124GAME( 1997, motoxgo,  0,         s23,    s23, ss23, ROT0, "Namco", "Motocross Go! (MG3 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29053125GAME( 1997, timecrs2, 0,         s23,    s23, ss23, ROT0, "Namco", "Time Crisis 2 (TSS3 Ver. B)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29063126GAME( 1997, timecrs2b,timecrs2,  s23,    s23, ss23, ROT0, "Namco", "Time Crisis 2 (TSS2 Ver. B)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29073127GAME( 1997, timecrs2c,timecrs2, ss23io, ss23, ss23, ROT0, "Namco", "Time Crisis 2 (TSS4 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29083128GAME( 1998, panicprk, 0,         s23,    s23, ss23, ROT0, "Namco", "Panic Park (PNP2 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29093129GAME( 1998, gunwars,  0,        gmen,   ss23, ss23, ROT0, "Namco", "Gunmen Wars (GM1 Ver. A)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
2910GAME( 1999, 500gp,    0,        ss23,   ss23, ss23, ROT0, "Namco", "500GP", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
3130GAME( 1998, 500gp,    0,        ss23,   ss23, ss23, ROT0, "Namco", "500 GP (5GP3 Ver. C)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29113131GAME( 1999, finfurl2, 0,        gmen,   ss23, ss23, ROT0, "Namco", "Final Furlong 2 (World)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
29123132GAME( 1999, finfurl2j,finfurl2, gmen,   ss23, ss23, ROT0, "Namco", "Final Furlong 2 (Japan)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
3133GAME( 2000, crszone,  0,      ss23e2,   ss23, ss23, ROT0, "Namco", "Crisis Zone (CSZO3 Ver. B)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND )
src/mame/drivers/stv.c
r7640r7641
30943094   ROM_LOAD16_WORD_SWAP( "mpr18532.1",    0x1800000, 0x0400000, CRC(39528643) SHA1(e35f4c35c9eb13e1cdcc26cb2599bb846f2c1af7) ) // good
30953095   ROM_LOAD16_WORD_SWAP( "mpr18539.8",    0x1c00000, 0x0400000, CRC(62b3908c) SHA1(3f00e49beb0e5575cc4250a25c41f04dc91d6ed0) ) // good
30963096   ROM_LOAD16_WORD_SWAP( "mpr18540.9",    0x2000000, 0x0400000, CRC(4c2b59a4) SHA1(4d15503fcff0e9e0d1ed3bac724278102b506da0) ) // good
3097
3098   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3099   ROM_LOAD( "fhboxers.nv", 0x0000, 0x0080, CRC(590fd6da) SHA1(1abe71c62c51a246d854f02cd4cb79fd0d427e88) )
30973100ROM_END
30983101
30993102/* set system to 1 player to test rom */
r7640r7641
31153118   ROM_LOAD16_WORD_SWAP( "mpr20434.10",   0x2400000, 0x0400000, CRC(85c94afc) SHA1(dfc2f16614bc499747ea87567a21c86e7bddce45) ) // good
31163119   ROM_LOAD16_WORD_SWAP( "mpr20435.11",   0x2800000, 0x0400000, CRC(263a2e48) SHA1(27ef4bf577d240e36dcb6e6a09b9c5f24e59ce8c) ) // good
31173120   ROM_LOAD16_WORD_SWAP( "mpr20436.12",   0x2c00000, 0x0400000, CRC(e3823f49) SHA1(754d48635bd1d4fb01ff665bfe2a71593d92f688) ) // good
3121
3122   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3123   ROM_LOAD( "findlove.nv", 0x0000, 0x0080, CRC(df2fa9f6) SHA1(f05450e1648eafd2ffb52e50769f07bdc75ffb95) )
31183124ROM_END
31193125
31203126ROM_START( finlarch )
r7640r7641
32223228   ROM_LOAD16_WORD_SWAP( "mpr18738.2",    0x0400000, 0x0400000, CRC(4b3c175a) SHA1(b6d2438ae1d3d51950a7ed1eaadf2dae45c4e7b1) ) // good
32233229   ROM_LOAD16_WORD_SWAP( "mpr18739.3",    0x0800000, 0x0400000, CRC(eb41fa67) SHA1(d12acebb1df9eafd17aff1841087f5017225e7e7) ) // good
32243230   ROM_LOAD16_WORD_SWAP( "mpr18740.4",    0x0c00000, 0x0200000, CRC(9ca7962f) SHA1(a09e0db2246b34ca7efa3165afbc5ba292a95398) ) // good
3231
3232   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3233   ROM_LOAD( "kiwames.nv", 0x0000, 0x0080, CRC(c7002732) SHA1(57395d256a58ddcedd354ce1f2c458321be40505) )
32253234ROM_END
32263235
32273236ROM_START( maruchan )
r7640r7641
32533262   ROM_LOAD16_WORD_SWAP( "mpr20999.6",    0x1400000, 0x0400000, CRC(82e31f25) SHA1(0cf74af14abb6ede21d19bc22041214232751594) ) // good
32543263   ROM_LOAD16_WORD_SWAP( "mpr20994.1",    0x1800000, 0x0400000, CRC(a69243a0) SHA1(e5a1b6ec62bdd5b015ed6cf48f5a6aabaf4bd837) ) // good
32553264   ROM_LOAD16_WORD_SWAP( "mpr21001.8",    0x1c00000, 0x0400000, CRC(95fbe549) SHA1(8cfb48f353b2849600373d66f293f103bca700df) ) // good
3265
3266   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3267   ROM_LOAD( "myfairld.nv", 0x0000, 0x0080, CRC(c7cf3a5a) SHA1(5365f38047821305658f94395f03cf2c49c87576) )
32563268ROM_END
32573269
32583270ROM_START( othellos )
r7640r7641
34323444   ROM_LOAD16_WORD_SWAP( "mpr20550.1",    0x1800000, 0x0400000, CRC(083e1ca8) SHA1(03944dd8fe86f305ca4bd2d71e2140e03798ffc9) ) // good
34333445   ROM_LOAD16_WORD_SWAP( "mpr20556.8",    0x1c00000, 0x0400000, CRC(1fd70c6c) SHA1(d9d2e362d13238216f4f7e10095fb8383bbd91e8) ) // good
34343446   ROM_LOAD16_WORD_SWAP( "mpr20557.9",    0x2000000, 0x0400000, CRC(3c9ba442) SHA1(2e5b795cf4cdc11ab3e4887b2f77c7147c6e3eec) ) // good
3447
3448   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3449   ROM_LOAD( "seabass.nv", 0x0000, 0x0080, CRC(4e7c0944) SHA1(dbba78f6a7f3e7d12d5c4fff36117db82f5f9c01) )
34353450ROM_END
34363451
34373452ROM_START( shanhigw )
r7640r7641
34943509   ROM_LOAD16_WORD_SWAP( "mpr21491.4",    0x0c00000, 0x0400000, CRC(cf7ee784) SHA1(af823df2d60d8ef3d17628b95a04136b807ca095) ) // ic4 good (was .14)
34953510   ROM_LOAD16_WORD_SWAP( "mpr21492.5",    0x1000000, 0x0400000, CRC(57753894) SHA1(5c51167c158443d02a53d724a5ceb73055876c06) ) // ic5 good (was .15)
34963511   ROM_LOAD16_WORD_SWAP( "mpr21493.6",    0x1400000, 0x0400000, CRC(efb2d271) SHA1(a591e48206704fbda5fef3ce69ad279da1017ed6) ) // ic6 good (was .16)
3512
3513   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3514   ROM_LOAD( "sss.nv", 0x0000, 0x0080, CRC(3473b2f3) SHA1(6480b4b321af8ee6e967710e74f2556c17bfca97) )
34973515ROM_END
34983516
34993517ROM_START( suikoenb )
r7640r7641
35683586   ROM_LOAD16_WORD_SWAP( "mpr19619.6",    0x1400000, 0x0400000, CRC(0b76866c) SHA1(10add2993dfe9daf757ec2ff8675390081a93c0a) ) // good
35693587   ROM_LOAD16_WORD_SWAP( "mpr19614.1",    0x1800000, 0x0400000, CRC(b83b3f03) SHA1(e5a5919ee74964633eaaf4af2fe04c38604ccf16) ) // good
35703588   ROM_LOAD16_WORD_SWAP( "mpr19621.8",    0x1c00000, 0x0400000, CRC(f92616b3) SHA1(61a9dda92a86a02d027260e11b1bad3b0dda9f02) ) // good
3589
3590   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3591   ROM_LOAD( "vmahjong.nv", 0x0000, 0x0080, CRC(4e6487f4) SHA1(d6d930ab5f21b8c4f42812d08b3ee90f2bc94081) )
35713592ROM_END
35723593
35733594ROM_START( winterht )
r7640r7641
37073728//  ROM_LOAD16_WORD_SWAP( "mpr17945.1",    0x1800000, 0x0200000, CRC(03ede188) SHA1(849c7fab5b97e043fea3deb8df6cc195ccced0e0) ) // good
37083729   ROM_LOAD16_WORD_SWAP( "mpr-18789.ic8", 0x1c00000, 0x0400000, CRC(b388616f) SHA1(0b2c5a547c3a6a8fb9f4ca54336cf6dc9adb8c6a) ) // good
37093730   ROM_LOAD16_WORD_SWAP( "mpr-18788.ic9", 0x2000000, 0x0400000, CRC(feae5867) SHA1(7d2e47d5ab18700a246d53fdb7872a905cdac55a) ) // good
3731
3732   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3733   ROM_LOAD( "critcrsh.nv", 0x0000, 0x0080, CRC(3da9860e) SHA1(05b315aa71fcfc4e617266e1c5e4954eccbf7854) )
37103734ROM_END
37113735
37123736ROM_START( sfish2 )
r7640r7641
37583782   ROM_LOAD16_WORD_SWAP( "mpr-19357.ic5",    0x1000000, 0x0400000, CRC(aa749370) SHA1(f09b0aa94fcc983419aaf2465dae5c9c64606158) ) // good
37593783   ROM_LOAD16_WORD_SWAP( "mpr-19358.ic6",    0x1400000, 0x0400000, CRC(0969f1ec) SHA1(25b9671f0975172f283458d46e160080dd1d19e9) ) // good
37603784   ROM_LOAD16_WORD_SWAP( "mpr-19359.ic1",    0x1800000, 0x0400000, CRC(b0d06f9c) SHA1(19e04c9c3a0bea5950aba8e1975962fa37722f32) ) // good
3785
3786   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 3 players
3787   ROM_LOAD( "magzun.nv", 0x0000, 0x0080, CRC(42700321) SHA1(1f2ba760c410312539c8677223edcd1cda3b51d4) )
37613788ROM_END
37623789
37633790
r7640r7641
37953822   ROM_LOAD16_WORD_SWAP( "ic36",    0x1000000, 0x0200000, CRC(0c9df896) SHA1(4d8c18205e7aa90bfaa677ecff2b65128f2ad47c) ) // OK
37963823   ROM_LOAD16_WORD_SWAP( "ic23",    0x1200000, 0x0200000, CRC(bd922829) SHA1(4c6f988173e439a05a77da043d856e142b0da831) ) // OK
37973824   ROM_LOAD16_WORD_SWAP( "ic25",    0x1400000, 0x0200000, CRC(f77f9e24) SHA1(9a9636114e74c1fd7bd67db8005af02ef6a75ab1) ) // OK
3825
3826   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3827   ROM_LOAD( "nclubv3.nv", 0x0000, 0x0080, CRC(9122a9e9) SHA1(5318994905e005567709c41449547c545182bece) )
37983828ROM_END
37993829
38003830ROM_START( techbowl ) // set to 1p
r7640r7641
38073837   ROM_LOAD16_WORD_SWAP( "ic26",    0x0600000, 0x0200000, CRC(fb073352) SHA1(a5164aa5854ab3095f704ab73b6e4fb9ed0e0785) ) // OK
38083838   ROM_LOAD16_WORD_SWAP( "ic28",    0x0800000, 0x0200000, CRC(530e0ceb) SHA1(8d14eb9dbf253a4563587d256a15492384e7ca5c) ) // OK
38093839   ROM_LOAD16_WORD_SWAP( "ic30",    0x0a00000, 0x0200000, CRC(8d89877e) SHA1(7d76d48d64d7ac5411d714a4bb83f37e3e5b8df6) ) // OK
3840
3841   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3842   ROM_LOAD( "techbowl.nv", 0x0000, 0x0080, CRC(5bebc2b7) SHA1(e189e891e1753059fbaad4ce82ddf191d5e8176a) )
38103843ROM_END
38113844
38123845ROM_START( micrombc ) // set to 1p
r7640r7641
38223855   ROM_LOAD16_WORD_SWAP( "ic32",    0x0c00000, 0x0200000, CRC(62c10626) SHA1(58cb0ca0330fa7a62b277ab0ff84bff65b81bb23) ) // OK
38233856   ROM_LOAD16_WORD_SWAP( "ic34",    0x1000000, 0x0200000, CRC(8d89877e) SHA1(7d76d48d64d7ac5411d714a4bb83f37e3e5b8df6) ) // OK
38243857   ROM_LOAD16_WORD_SWAP( "ic36",    0x1200000, 0x0200000, CRC(8d89877e) SHA1(7d76d48d64d7ac5411d714a4bb83f37e3e5b8df6) ) // OK
3858
3859   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3860   ROM_LOAD( "micrombc.nv", 0x0000, 0x0080, CRC(6e89815f) SHA1(4478f614fb61859f4ee7bf55462f737387887e6f) )
38253861ROM_END
38263862
38273863ROM_START( pclub2 ) // set to 1p / runs with the USA bios
38283864   STV_BIOS
3865   ROM_DEFAULT_BIOS( "us" )
38293866
38303867   ROM_REGION32_BE( 0x3000000, "user1", ROMREGION_ERASE00 ) /* SH2 code */
38313868
r7640r7641
38343871   ROM_LOAD16_WORD_SWAP( "ic26",    0x0600000, 0x0200000, CRC(ab51da70) SHA1(85214aa805ffc9de59900dc0cd4e19e5ab756bf7) ) // OK
38353872   ROM_LOAD16_WORD_SWAP( "ic28",    0x0800000, 0x0200000, CRC(3a654b2a) SHA1(7398e25836bfbdeab6350759f25c420c3b496172) ) // OK
38363873   ROM_LOAD16_WORD_SWAP( "ic30",    0x0a00000, 0x0200000, CRC(8d89877e) SHA1(7d76d48d64d7ac5411d714a4bb83f37e3e5b8df6) ) // OK
3874
3875   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3876   ROM_LOAD( "pclub2.nv", 0x0000, 0x0080, CRC(00d0f04e) SHA1(8b5a3e1c52e34443f83fd4a8948a00cacb5071d0) )
38373877ROM_END
38383878
38393879ROM_START( pclub2v3 ) // set to 1p / runs with the USA bios
38403880   STV_BIOS
3881   ROM_DEFAULT_BIOS( "us" )
38413882
38423883   ROM_REGION32_BE( 0x3000000, "user1", ROMREGION_ERASE00 ) /* SH2 code */
38433884
r7640r7641
38453886   ROM_LOAD16_WORD_SWAP( "ic24",    0x0400000, 0x0200000, CRC(b5871198) SHA1(10d187eebcca5d70c5ae10d1a144685a96491126) ) // OK
38463887   ROM_LOAD16_WORD_SWAP( "ic26",    0x0600000, 0x0200000, CRC(d97034ed) SHA1(a7a0f659eefd539b2a1fd70ef394eed30ea54c0c) ) // OK
38473888   ROM_LOAD16_WORD_SWAP( "ic28",    0x0800000, 0x0200000, CRC(f1421506) SHA1(c384b695338144e5f051134bda73b059b678a7df) ) // OK
3848   ROM_LOAD16_WORD_SWAP( "ic30",    0x0a00000, 0x0200000, CRC(8d89877e) SHA1(7d76d48d64d7ac5411d714a4bb83f37e3e5b8df6) ) // OK
3889   ROM_LOAD16_WORD_SWAP( "ic30",    0x0a00000, 0x0200000, CRC(8d89877e) SHA1(7d76d48d64d7ac5411d714a4bb83f37e3e5b8df6) ) // OK (rom is blank?!)
3890
3891   ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
3892   ROM_LOAD( "pclub2v3.nv", 0x0000, 0x0080, CRC(a8a2d30c) SHA1(bdde3d62ff21190a23698058ff66e476a75a09aa) )
38493893ROM_END
38503894
38513895/*
src/mame/drivers/megatech.c
r7640r7641
8282Bonanza Bros.              171-5782    837-6963-49       610-0239-49         MPR-13905A-F   (23C4000)     EPR-12368-49   (27256)   n/a
8383Streets of Rage            171-5782    837-6963-51       610-0239-51         MPR-14125-SM   (uPD23C4000)  EPR-12368-51   (27C256)  n/a
8484Sonic The Hedgehog         171-5782    837-6963-52       610-0239-52         MPR-13913-F    (834200A)     EPR-12368-52   (27C256)  n/a
85Spider-Man                 171-5782    837-6963-54       610-0239-54         MPR-14027-SM   (uPD23C4000)  EPR-12368-54   (27C256)  n/a
8586Mario Lemeux Hockey        171-5782    837-6963-59       610-0239-59         MPR-14376-H    (234000)      EPR-12368-59   (27256)   n/a
8687Turbo Outrun               171-5782    837-6963-61       610-0239-61         MPR-14674      (uPD23C4000)  EPR-12368-61   (27256)   n/a
8788Sonic Hedgehog 2           171-6215A   837-6963-62       610-0239-62         MPR-15000A-F   (838200)      EPR-12368-62   (27256)   n/a
r7640r7641
10511052   MEGATECH_GAME53("game0", "inst0")
10521053ROM_END
10531054
1055/* Game 54 - Spiderman */
1056#define MEGATECH_GAME54(GAME_REGION, INSTRUCTION_REGION) \
1057   ROM_REGION16_BE( 0x300000, GAME_REGION, 0 ) \
1058   ROM_LOAD16_WORD_SWAP( "mp14027-sm.ic1", 0x000000, 0x080000, CRC(e2c08a06) SHA1(39e592eafd47e2aa6edbb4845d44750057bff890) ) \
1059    MEGATECH_INSTRUCTION_REGION( INSTRUCTION_REGION, MEGATECH_GAME_IS_GEN ) \
1060   ROM_LOAD( "epr-12368-54.ic2", 0x000000, 0x08000,  CRC(30b68988) SHA1(04eeb0fad732a791b6bc0c0846306d567573649f) ) \
1061
1062ROM_START( mt_spman ) /* Spiderman */
1063   MEGATECH_BIOS
1064   MEGATECH_GAME54("game0", "inst0")
1065ROM_END
1066
10541067/* Game 57 - Golden Axe 2 (Genesis) */
10551068#define MEGATECH_GAME57(GAME_REGION, INSTRUCTION_REGION) \
10561069   ROM_REGION16_BE( 0x300000, GAME_REGION, 0 ) \
r7640r7641
12111224/* 52 */ GAME( 1991, mt_sonic, megatech, megatech, megatech, mtnew, ROT0, "Sega",                  "Sonic The Hedgehog (Mega-Tech, set 1)", GAME_NOT_WORKING )
12121225/*    */ GAME( 1991, mt_sonia, mt_sonic, megatech, megatech, mtnew, ROT0, "Sega",                  "Sonic The Hedgehog (Mega-Tech, set 2)", GAME_NOT_WORKING )
12131226/* 53 */ GAME( 1990, mt_fshrk, megatech, megatech, megatech, mtnew, ROT0, "Toaplan / Sega",        "Fire Shark (Mega-Tech)", GAME_NOT_WORKING )
1214/* 54 */ // Spider-Man
1227/* 54 */ GAME( 1991, mt_spman, megatech, megatech, megatech, mtnew, ROT0, "Marvel, Sega",          "Spider-Man vs The Kingpin (Mega-Tech)", GAME_NOT_WORKING )
12151228/* 55 */ // unknown
12161229/* 56 */ // unknown
12171230/* 57 */ GAME( 1991, mt_gaxe2, megatech, megatech, megatech, mtnew, ROT0, "Sega",                  "Golden Axe II (Mega-Tech)", GAME_NOT_WORKING )
src/mame/drivers/vamphalf.c
r7640r7641
1717    Vamp 1/2                   (c) 1999 Danbi & F2 System  (Korea version)
1818    Date Quiz Go Go Episode 2  (c) 2000 SemiCom
1919    Mission Craft              (c) 2000 Sun                (version 2.4)
20    Mr. Dig                    (c) 2000 Sun
2021    Final Godori               (c) 2001 SemiCom            (version 2.20.5915)
2122    Wyvern Wings               (c) 2001 SemiCom
2223    Mr. Kicker                 (c) 2001 SemiCom
2324    Age Of Heroes - Silkroad 2 (c) 2001 Unico              (v0.63 - 2001/02/07)
2425
25Known games on simular hardware but not dumped:
26    Mr. Dig (c) 2000 Sun (Mr. Driller clone) on a F-E1-16-002 PCB
27
2826 Real games bugs:
2927 - dquizgo2: bugged video test
3028
29 Notes:
30  Mr Kicker appears to be broken due to problems with the Hyperstone CPU Core
31  It ends up trashing the registers containing the return value for a function
32
33    000018D6: MASK L51, L45, $1e00000
34    000018DC: CMPI L51, $c00000
35    000018E2: BE $18e6
36    000018E4: RET PC, L0
37    0003FA66: RET PC, L1  <-- no valid return value
38    00000000: CHK PC, PC     causes jump to 0
39
40 It executes this code several times earlier before the crash, so I don't know
41 if it's some kind of nested call problem, or simply beacuse it's using a
42 different set of registers for the frame / call this time. (or if another
43 Hyperstone bug is trashing some of the code in RAM)
44
45
46
47
3148*********************************************************************/
3249
3350#include "emu.h"
r7640r7641
115132   flipscreen = data & flip_bit;
116133}
117134
118
119135static WRITE16_HANDLER( jmpbreak_flipscreen_w )
120136{
121137   flipscreen = data & 0x8000;
r7640r7641
293309   AM_RANGE(0x60a0, 0x60a3) AM_DEVWRITE("oki", finalgdr_oki_bank_w)
294310ADDRESS_MAP_END
295311
312static ADDRESS_MAP_START( mrkicker_io, ADDRESS_SPACE_IO, 32 )
313   AM_RANGE(0x2400, 0x2403) AM_DEVREAD("eeprom", eeprom32_r)
314   AM_RANGE(0x4000, 0x4003) AM_DEVWRITE("eeprom", finalgdr_eeprom_w)
315   AM_RANGE(0x4040, 0x4043) AM_WRITE(finalgdr_prot_w)
316   AM_RANGE(0x6400, 0x6403) AM_READ(finalgdr_prot_r)
317   AM_RANGE(0x7000, 0x7007) AM_DEVREADWRITE8("ymsnd", ym2151_r, ym2151_w, 0x0000ff00)
318//  AM_RANGE(0x7400, 0x7403) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x0000ff00)
319
320//  AM_RANGE(0xxxxx, 0xxxxx) AM_WRITE(finalgdr_backupram_bank_w)
321//  AM_RANGE(0xxxxx, 0xxxxx) AM_READWRITE(finalgdr_backupram_r, finalgdr_backupram_w)
322//  AM_RANGE(0xxxxx, 0xxxxx) AM_READ_PORT("P1_P2")
323//  AM_RANGE(0xxxxx, 0xxxxx) AM_READ_PORT("SYSTEM")
324//  AM_RANGE(0xxxxx, 0xxxxx) AM_READNOP //?
325//  AM_RANGE(0xxxxx, 0xxxxx) AM_WRITE(flipscreen32_w) //?
326//  AM_RANGE(0xxxxx, 0xxxxx) AM_WRITE(finalgdr_prize_w)
327//  AM_RANGE(0xxxxx, 0xxxxx) AM_DEVWRITE("oki", finalgdr_oki_bank_w)
328ADDRESS_MAP_END
329
330
296331static ADDRESS_MAP_START( jmpbreak_io, ADDRESS_SPACE_IO, 16 )
297332   AM_RANGE(0x0c0, 0x0c3) AM_NOP // ?
298333   AM_RANGE(0x100, 0x103) AM_WRITENOP // ?
r7640r7641
305340   AM_RANGE(0x684, 0x687) AM_DEVREADWRITE8("ymsnd", ym2151_status_port_r, ym2151_data_port_w, 0x00ff)
306341ADDRESS_MAP_END
307342
343static ADDRESS_MAP_START( mrdig_io, ADDRESS_SPACE_IO, 16 )
308344
345   AM_RANGE(0x500, 0x503) AM_READ_PORT("P1_P2")
346   AM_RANGE(0x3c0, 0x3c3) AM_DEVWRITE("eeprom", eeprom_w)
347   AM_RANGE(0x180, 0x183) AM_DEVREAD("eeprom", eeprom_r)
348   AM_RANGE(0x080, 0x083) AM_DEVREADWRITE("oki", oki_r, oki_w)
349   AM_RANGE(0x280, 0x283) AM_READ_PORT("SYSTEM")
350   AM_RANGE(0x0c0, 0x0c3) AM_DEVWRITE8("ymsnd", ym2151_register_port_w, 0x00ff)
351   AM_RANGE(0x0c4, 0x0c7) AM_DEVREADWRITE8("ymsnd", ym2151_status_port_r, ym2151_data_port_w, 0x00ff)
352ADDRESS_MAP_END
353
309354static ADDRESS_MAP_START( aoh_map, ADDRESS_SPACE_PROGRAM, 32 )
310355   AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(&wram32)
311356   AM_RANGE(0x40000000, 0x4003ffff) AM_RAM AM_BASE(&tiles32)
r7640r7641
721766   MDRV_IMPORT_FROM(sound_ym_oki)
722767MACHINE_DRIVER_END
723768
769static MACHINE_DRIVER_START( mrdig )
770   MDRV_IMPORT_FROM(common)
771   MDRV_CPU_REPLACE("maincpu", GMS30C2116, 50000000)   /* 50 MHz */
772   MDRV_CPU_MODIFY("maincpu")
773   MDRV_CPU_IO_MAP(mrdig_io)
774
775   MDRV_IMPORT_FROM(sound_ym_oki)
776MACHINE_DRIVER_END
777
724778static MACHINE_DRIVER_START( wyvernwg )
725779   MDRV_IMPORT_FROM(common)
726780   MDRV_CPU_REPLACE("maincpu", E132T, 50000000)   /* 50 MHz */
r7640r7641
741795   MDRV_IMPORT_FROM(sound_ym_oki)
742796MACHINE_DRIVER_END
743797
798static MACHINE_DRIVER_START( mrkicker )
799   MDRV_IMPORT_FROM(common)
800   MDRV_CPU_REPLACE("maincpu", E132T, 50000000)   /* 50 MHz */
801   MDRV_CPU_PROGRAM_MAP(common_32bit_map)
802   MDRV_CPU_IO_MAP(mrkicker_io)
803
804   MDRV_NVRAM_HANDLER(finalgdr)
805
806   MDRV_IMPORT_FROM(sound_ym_oki)
807MACHINE_DRIVER_END
808
744809static MACHINE_DRIVER_START( aoh )
745810   MDRV_CPU_ADD("maincpu", E132XN, 20000000*4)   /* 4x internal multiplier */
746811   MDRV_CPU_PROGRAM_MAP(aoh_map)
r7640r7641
10341099
10351100/*
10361101
1102Mr. Dig
1103SUN, 2000
1104
1105Rip-off of Mr. Driller series
1106
1107F-E1-16-002
1108+----------------------------------------------+
1109|     VR1                   M6295  VROM1 28MHz |
1110|                 YM3012                       |
1111|                 YM2151            MEM2       |
1112|                                   MEM3       |
1113|               CRAM1               MEM5       |
1114|               CRAM2               MEM7       |
1115|J                                             |
1116|A              MEM1U  +----------++----------+|
1117|M                     |          ||          ||
1118|M              MEM1L  |Quicklogic||Quicklogic||
1119|A                     | QL2003-  || QL2003-  ||
1120|                      | XPL84C   || XPL84C   ||
1121|                      |          ||          ||
1122|                      +----------++----------+|
1123|                                              |
1124| 93C46          DRAM1      ROM1 ROML00  ROMH00|
1125|P1 P2   50MHz  GMS30C2116  ROM2   *       *   |
1126|                                              |
1127+----------------------------------------------+
1128
1129Notes:
1130CPU: HYUNDAI GMS30C2116 (Hyperstone E1-16T compatible) @ 50.000MHz
1131
1132     DRAM1 - LG Semi GM71C18163 1M x16 EDO DRAM (SOJ44)
1133MEMx/CRAMx - NKK N341256SJ-15 32K x8 SRAM (SOJ28)
1134
1135Oki M6295 rebaged as AD-65
1136YM3012/YM2151 rebaged as KA12/KB2001
1137
1138 P1 - Setup push button
1139 P2 - Reset push button
1140VR1 - Volume adjust pot
1141
1142ROMs:
1143    ROML00 & ROMH00 - Macronix MX29F1610MC-12 SOP44 16MBit FlashROM
1144  * ROML01 & ROMH01 - Unpopulated space for MX29F1610MC-12 SOP44 16MBit FlashROM
1145    VROM1           - Atmel AT27C020 2MBit DIP32 EPROM
1146    ROM1/2          - MX 27C4000 4MBit DIP32 EPROM
1147
1148*/
1149
1150ROM_START( mrdig )
1151   ROM_REGION16_BE( 0x100000, "user1", ROMREGION_ERASE00 ) /* Hyperstone CPU Code */
1152   ROM_LOAD( "rom1.bin", 0x00000, 0x80000, CRC(5b960320) SHA1(adf5499a39987041fc93e409bdb5fd07dacec4f9) )
1153   ROM_LOAD( "rom2.bin", 0x80000, 0x80000, CRC(75d48b64) SHA1(c9c492fb9cabafcf0bc05f44bf80ee6df3c21a1b) )
1154
1155   ROM_REGION( 0x800000, "gfx1", 0 ) /* 16x16x8 Sprites */
1156   ROM_LOAD32_WORD( "roml00.bin", 0x000000, 0x200000, CRC(f6b161ea) SHA1(c417a4c877ffa2fdf5857ecc9c78ffc0c09dc516) )
1157   ROM_LOAD32_WORD( "romh00.bin", 0x000002, 0x200000, CRC(5477efed) SHA1(e4991ee1b41d512eaa508351b6a78261dfde5a3d) )
1158
1159   ROM_REGION( 0x40000, "oki", 0 ) /* Oki Samples */
1160   ROM_LOAD( "vrom1.bin", 0x00000, 0x40000, CRC(5fd9e1c6) SHA1(fef82ef816af69f31d12fc4634d06d825e8b7416) )
1161ROM_END
1162
1163/*
1164
10371165Cool Minigame Collection
10381166SemiCom, 1999
10391167
r7640r7641
16721800   return wram[(0x00906fc / 2)+offset];
16731801}
16741802
1803static READ16_HANDLER( mrdig_speedup_r )
1804{
1805   if(cpu_get_pc(space->cpu) == 0x1710)
1806   {
1807      if(irq_active(space))
1808         cpu_spinuntil_int(space->cpu);
1809      else
1810         cpu_eat_cycles(space->cpu, 50);
1811   }
1812
1813   return wram[(0x00a99c / 2)+offset];
1814}
1815
16751816static DRIVER_INIT( vamphalf )
16761817{
16771818   memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x0004a840, 0x0004a843, 0, 0, vamphalf_speedup_r );
r7640r7641
18001941   palshift = 0;
18011942}
18021943
1944static DRIVER_INIT( mrdig )
1945{
1946   memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x00a99c, 0x00a99f, 0, 0, mrdig_speedup_r );
1947   //memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xe0000000, 0xe0000003, 0, 0, jmpbreak_flipscreen_w );
1948
1949   palshift = 0;
1950}
1951
18031952GAME( 1999, coolmini, 0,        coolmini, common,   coolmini, ROT0,   "SemiCom",           "Cool Minigame Collection", 0 )
18041953GAME( 1999, jmpbreak, 0,        jmpbreak, common,   jmpbreak, ROT0,   "F2 System",         "Jumping Break" , 0 )
18051954GAME( 1999, suplup,   0,        suplup,   common,   suplup,   ROT0,   "Omega System",      "Super Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 4.0 / 990518)" , 0 )
r7640r7641
18101959GAME( 1999, vamphalfk,vamphalf, vamphalf, common,   vamphafk, ROT0,   "Danbi & F2 System", "Vamp x1/2 (Korea)", 0 )
18111960GAME( 2000, dquizgo2, 0,        coolmini, common,   dquizgo2, ROT0,   "SemiCom",           "Date Quiz Go Go Episode 2" , 0)
18121961GAME( 2000, misncrft, 0,        misncrft, common,   misncrft, ROT90,  "Sun",               "Mission Craft (version 2.4)", GAME_NO_SOUND )
1962GAME( 2000, mrdig,    0,        mrdig,    common,   mrdig,    ROT0,   "Sun",               "Mr. Dig", 0 )
18131963GAME( 2001, finalgdr, 0,        finalgdr, finalgdr, finalgdr, ROT0,   "SemiCom",           "Final Godori (Korea, version 2.20.5915)", 0 )
1814GAME( 2001, mrkicker, 0,        finalgdr, finalgdr, mrkicker, ROT0,   "SemiCom",           "Mr. Kicker", GAME_NOT_WORKING )
1964GAME( 2001, mrkicker, 0,        mrkicker, finalgdr, mrkicker, ROT0,   "SemiCom",           "Mr. Kicker", GAME_NOT_WORKING )
18151965GAME( 2001, wyvernwg, 0,        wyvernwg, common,   wyvernwg, ROT270, "SemiCom (Game Vision License)", "Wyvern Wings", GAME_NO_SOUND )
18161966GAME( 2001, aoh,      0,        aoh,      aoh,      aoh,      ROT0,   "Unico",             "Age Of Heroes - Silkroad 2 (v0.63 - 2001/02/07)", 0 )
src/mame/drivers/vmetal.c
r7640r7641
7979#include "cpu/m68000/m68000.h"
8080#include "sound/okim6295.h"
8181#include "sound/es8712.h"
82#include "includes/metro.h"
8283
83static UINT16 *vmetal_texttileram;
84static UINT16 *vmetal_mid1tileram;
85static UINT16 *vmetal_mid2tileram;
86static UINT16 *vmetal_tlookup;
87static UINT16 *vmetal_videoregs;
88
89
90static tilemap_t *vmetal_texttilemap;
91static tilemap_t *vmetal_mid1tilemap;
92static tilemap_t *vmetal_mid2tilemap;
93
94/* video/metro.c */
95extern UINT16 *metro_videoregs;
96void metro_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect);
97
9884static READ16_HANDLER ( varia_crom_read )
9985{
10086   /* game reads the cgrom, result is 7772, verified to be correct on the real board */
10187
88   metro_state *state = (metro_state *)space->machine->driver_data;
10289   UINT8 *cgrom = memory_region(space->machine, "gfx1");
10390   UINT16 retdat;
91
10492   offset = offset << 1;
105   offset |= (vmetal_videoregs[0x0ab/2]&0x7f) << 16;
106   retdat = ((cgrom[offset] <<8)| (cgrom[offset+1]));
107//  popmessage("varia romread offset %06x data %04x",offset, retdat);
93   offset |= (state->vmetal_videoregs[0x0ab / 2] & 0x7f) << 16;
94   retdat = ((cgrom[offset] << 8) | (cgrom[offset + 1]));
95   // popmessage("varia romread offset %06x data %04x", offset, retdat);
10896
10997   return retdat;
11098}
r7640r7641
117105
118106
119107
120static void get_vmetal_tlookup(UINT16 data, UINT16 *tileno, UINT16 *color)
108static void get_vmetal_tlookup(running_machine *machine, UINT16 data, UINT16 *tileno, UINT16 *color)
121109{
122   int idx = ((data & 0x7fff) >> 4)*2;
123   UINT32 lookup = (vmetal_tlookup[idx]<<16) | vmetal_tlookup[idx+1];
124   *tileno = (data & 0xf) | ((lookup>>2) & 0xfff0);
125   *color = (lookup>>20) & 0xff;
110   metro_state *state = (metro_state *)machine->driver_data;
111   int idx = ((data & 0x7fff) >> 4) * 2;
112   UINT32 lookup = (state->vmetal_tlookup[idx] << 16) | state->vmetal_tlookup[idx + 1];
113
114   *tileno = (data & 0xf) | ((lookup >> 2) & 0xfff0);
115   *color = (lookup >> 20) & 0xff;
126116}
127117
128118
129119static WRITE16_HANDLER( vmetal_texttileram_w )
130120{
131   COMBINE_DATA(&vmetal_texttileram[offset]);
132   tilemap_mark_tile_dirty(vmetal_texttilemap,offset);
121   metro_state *state = (metro_state *)space->machine->driver_data;
122   COMBINE_DATA(&state->vmetal_texttileram[offset]);
123   tilemap_mark_tile_dirty(state->vmetal_texttilemap, offset);
133124}
134125
135126static WRITE16_HANDLER( vmetal_mid1tileram_w )
136127{
137   COMBINE_DATA(&vmetal_mid1tileram[offset]);
138   tilemap_mark_tile_dirty(vmetal_mid1tilemap,offset);
128   metro_state *state = (metro_state *)space->machine->driver_data;
129   COMBINE_DATA(&state->vmetal_mid1tileram[offset]);
130   tilemap_mark_tile_dirty(state->vmetal_mid1tilemap, offset);
139131}
132
140133static WRITE16_HANDLER( vmetal_mid2tileram_w )
141134{
142   COMBINE_DATA(&vmetal_mid2tileram[offset]);
143   tilemap_mark_tile_dirty(vmetal_mid2tilemap,offset);
135   metro_state *state = (metro_state *)space->machine->driver_data;
136   COMBINE_DATA(&state->vmetal_mid2tileram[offset]);
137   tilemap_mark_tile_dirty(state->vmetal_mid2tilemap, offset);
144138}
145139
146140
r7640r7641
157151{
158152   /* Lower nibble is the coin control bits shown in
159153       service mode, but in game mode they're different */
160   coin_counter_w(device->machine, 0,data & 0x04);
161   coin_counter_w(device->machine, 1,data & 0x08);   /* 2nd coin schute activates coin 0 counter in game mode?? */
162//  coin_lockout_w(device->machine, 0,data & 0x01);  /* always on in game mode?? */
163   coin_lockout_w(device->machine, 1,data & 0x02);   /* never activated in game mode?? */
154   coin_counter_w(device->machine, 0, data & 0x04);
155   coin_counter_w(device->machine, 1, data & 0x08);   /* 2nd coin schute activates coin 0 counter in game mode?? */
156//  coin_lockout_w(device->machine, 0, data & 0x01);  /* always on in game mode?? */
157   coin_lockout_w(device->machine, 1, data & 0x02);   /* never activated in game mode?? */
164158
165159   if ((data & 0x40) == 0)
166160      device->reset();
r7640r7641
209203    */
210204
211205   es8712_w(device, offset, data);
212   logerror("%s:Writing %04x to ES8712 offset %02x\n",cpuexec_describe_context(device->machine),data,offset);
206   logerror("%s:Writing %04x to ES8712 offset %02x\n", cpuexec_describe_context(device->machine), data, offset);
213207}
214208
215209
216210static ADDRESS_MAP_START( varia_program_map, ADDRESS_SPACE_PROGRAM, 16 )
217211   AM_RANGE(0x000000, 0x0fffff) AM_ROM
218   AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(vmetal_texttileram_w) AM_BASE(&vmetal_texttileram)
219   AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(vmetal_mid1tileram_w) AM_BASE(&vmetal_mid1tileram)
220   AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(vmetal_mid2tileram_w) AM_BASE(&vmetal_mid2tileram)
212   AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(vmetal_texttileram_w) AM_BASE_MEMBER(metro_state, vmetal_texttileram)
213   AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(vmetal_mid1tileram_w) AM_BASE_MEMBER(metro_state, vmetal_mid1tileram)
214   AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(vmetal_mid2tileram_w) AM_BASE_MEMBER(metro_state, vmetal_mid2tileram)
221215
222216   AM_RANGE(0x160000, 0x16ffff) AM_READ(varia_crom_read) // cgrom read window ..
223217
224218   AM_RANGE(0x170000, 0x173fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)   // Palette
225   AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
219   AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_MEMBER(metro_state, spriteram, spriteram_size)
226220   AM_RANGE(0x175000, 0x177fff) AM_RAM
227   AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE(&vmetal_tlookup)
228   AM_RANGE(0x178800, 0x1796ff) AM_RAM AM_BASE(&vmetal_videoregs)
229   AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE(&metro_videoregs   )   // Video Registers
221   AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE_MEMBER(metro_state, vmetal_tlookup)
222   AM_RANGE(0x178800, 0x1796ff) AM_RAM AM_BASE_MEMBER(metro_state, vmetal_videoregs)
223   AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE_MEMBER(metro_state, videoregs)   // Video Registers
230224
231225   AM_RANGE(0x200000, 0x200001) AM_READ_PORT("P1_P2") AM_DEVWRITE8("essnd", vmetal_control_w, 0x00ff)
232226   AM_RANGE(0x200002, 0x200003) AM_READ_PORT("SYSTEM")
233227
234228   /* i have no idea whats meant to be going on here .. it seems to read one bit of the dips from some of them, protection ??? */
235   AM_RANGE(0x30fffe, 0x30ffff) AM_READ(varia_random )  // nothing?
236   AM_RANGE(0x317ffe, 0x317fff) AM_READ(varia_random )  // nothing?
237   AM_RANGE(0x31bffe, 0x31bfff) AM_READ(varia_random )  // nothing?
238   AM_RANGE(0x31dffe, 0x31dfff) AM_READ(varia_random )  // nothing?
239   AM_RANGE(0x31effe, 0x31efff) AM_READ(varia_random )  // nothing?
240   AM_RANGE(0x31f7fe, 0x31f7ff) AM_READ(varia_random )  // nothing?
241   AM_RANGE(0x31fbfe, 0x31fbff) AM_READ(varia_random )  // nothing?
242   AM_RANGE(0x31fdfe, 0x31fdff) AM_READ(varia_random )  // nothing?
243   AM_RANGE(0x31fefe, 0x31feff) AM_READ(varia_dips_bit8_r )  // 0x40 = dip1-8 , 0x80 = dip2-8
244   AM_RANGE(0x31ff7e, 0x31ff7f) AM_READ(varia_dips_bit7_r )  // 0x40 = dip1-7 , 0x80 = dip2-7
245   AM_RANGE(0x31ffbe, 0x31ffbf) AM_READ(varia_dips_bit6_r )  // 0x40 = dip1-6 , 0x80 = dip2-6
246   AM_RANGE(0x31ffde, 0x31ffdf) AM_READ(varia_dips_bit5_r )  // 0x40 = dip1-5 , 0x80 = dip2-5
247   AM_RANGE(0x31ffee, 0x31ffef) AM_READ(varia_dips_bit4_r )  // 0x40 = dip1-4 , 0x80 = dip2-4
248   AM_RANGE(0x31fff6, 0x31fff7) AM_READ(varia_dips_bit3_r )  // 0x40 = dip1-3 , 0x80 = dip2-3
249   AM_RANGE(0x31fffa, 0x31fffb) AM_READ(varia_dips_bit2_r )  // 0x40 = dip1-2 , 0x80 = dip2-2
250   AM_RANGE(0x31fffc, 0x31fffd) AM_READ(varia_dips_bit1_r )  // 0x40 = dip1-1 , 0x80 = dip2-1
229   AM_RANGE(0x30fffe, 0x30ffff) AM_READ(varia_random)  // nothing?
230   AM_RANGE(0x317ffe, 0x317fff) AM_READ(varia_random)  // nothing?
231   AM_RANGE(0x31bffe, 0x31bfff) AM_READ(varia_random)  // nothing?
232   AM_RANGE(0x31dffe, 0x31dfff) AM_READ(varia_random)  // nothing?
233   AM_RANGE(0x31effe, 0x31efff) AM_READ(varia_random)  // nothing?
234   AM_RANGE(0x31f7fe, 0x31f7ff) AM_READ(varia_random)  // nothing?
235   AM_RANGE(0x31fbfe, 0x31fbff) AM_READ(varia_random)  // nothing?
236   AM_RANGE(0x31fdfe, 0x31fdff) AM_READ(varia_random)  // nothing?
237   AM_RANGE(0x31fefe, 0x31feff) AM_READ(varia_dips_bit8_r)  // 0x40 = dip1-8 , 0x80 = dip2-8
238   AM_RANGE(0x31ff7e, 0x31ff7f) AM_READ(varia_dips_bit7_r)  // 0x40 = dip1-7 , 0x80 = dip2-7
239   AM_RANGE(0x31ffbe, 0x31ffbf) AM_READ(varia_dips_bit6_r)  // 0x40 = dip1-6 , 0x80 = dip2-6
240   AM_RANGE(0x31ffde, 0x31ffdf) AM_READ(varia_dips_bit5_r)  // 0x40 = dip1-5 , 0x80 = dip2-5
241   AM_RANGE(0x31ffee, 0x31ffef) AM_READ(varia_dips_bit4_r)  // 0x40 = dip1-4 , 0x80 = dip2-4
242   AM_RANGE(0x31fff6, 0x31fff7) AM_READ(varia_dips_bit3_r)  // 0x40 = dip1-3 , 0x80 = dip2-3
243   AM_RANGE(0x31fffa, 0x31fffb) AM_READ(varia_dips_bit2_r)  // 0x40 = dip1-2 , 0x80 = dip2-2
244   AM_RANGE(0x31fffc, 0x31fffd) AM_READ(varia_dips_bit1_r)  // 0x40 = dip1-1 , 0x80 = dip2-1
251245   AM_RANGE(0x31fffe, 0x31ffff) AM_READ(varia_random )  // nothing?
252246
253247   AM_RANGE(0x400000, 0x400001) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff )
r7640r7641
260254
261255
262256static INPUT_PORTS_START( varia )
263   PORT_START("P1_P2")   /* IN0 */
257   PORT_START("P1_P2")
264258   PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
265259   PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
266260   PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
r7640r7641
278272   PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
279273   PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START1 )
280274
281   PORT_START("SYSTEM")   /* IN1 */
275   PORT_START("SYSTEM")
282276   PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
283277   PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
284278   PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_TILT )
r7640r7641
286280   PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE2 ) // 'Test'
287281   PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused?
288282
289   PORT_START("DSW1")   /* Dips 1 */
283   PORT_START("DSW1")
290284   PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) )
291285   PORT_DIPSETTING(      0x0005, DEF_STR( 3C_1C )  )
292286   PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C )  )
r7640r7641
312306   PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
313307   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
314308
315   PORT_START("DSW2")   /* Dips 2 */
309   PORT_START("DSW2")
316310   PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ))
317311   PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
318312   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
r7640r7641
368362
369363static TILE_GET_INFO( get_vmetal_texttilemap_tile_info )
370364{
365   metro_state *state = (metro_state *)machine->driver_data;
371366   UINT32 tile;
372   UINT16 color, data = vmetal_texttileram[tile_index];
373   int idx = ((data & 0x7fff) >> 4)*2;
374   UINT32 lookup = (vmetal_tlookup[idx]<<16) | vmetal_tlookup[idx+1];
367   UINT16 color, data = state->vmetal_texttileram[tile_index];
368   int idx = ((data & 0x7fff) >> 4) * 2;
369   UINT32 lookup = (state->vmetal_tlookup[idx] << 16) | state->vmetal_tlookup[idx + 1];
370
375371   tile = (data & 0xf) | (lookup & 0x7fff0);
376   color = ((lookup>>20) & 0x1f)+0xe0;
377   if (data & 0x8000) tile = 0;
372   color = ((lookup >> 20) & 0x1f) + 0xe0;
373
374   if (data & 0x8000)
375      tile = 0;
376
378377   SET_TILE_INFO(1, tile, color, TILE_FLIPYX(0x0));
379378}
380379
381380
382381static TILE_GET_INFO( get_vmetal_mid1tilemap_tile_info )
383382{
384   UINT16 tile, color, data = vmetal_mid1tileram[tile_index];
385   get_vmetal_tlookup(data, &tile, &color);
386   if (data & 0x8000) tile = 0;
383   metro_state *state = (metro_state *)machine->driver_data;
384   UINT16 tile, color, data = state->vmetal_mid1tileram[tile_index];
385
386   get_vmetal_tlookup(machine, data, &tile, &color);
387
388   if (data & 0x8000)
389      tile = 0;
390
387391   SET_TILE_INFO(0, tile, color, TILE_FLIPYX(0x0));
388392}
393
389394static TILE_GET_INFO( get_vmetal_mid2tilemap_tile_info )
390395{
391   UINT16 tile, color, data = vmetal_mid2tileram[tile_index];
392   get_vmetal_tlookup(data, &tile, &color);
393   if (data & 0x8000) tile = 0;
396   metro_state *state = (metro_state *)machine->driver_data;
397   UINT16 tile, color, data = state->vmetal_mid2tileram[tile_index];
398
399   get_vmetal_tlookup(machine, data, &tile, &color);
400
401   if (data & 0x8000)
402      tile = 0;
403
394404   SET_TILE_INFO(0, tile, color, TILE_FLIPYX(0x0));
395405}
396406
397407static VIDEO_START(varia)
398408{
399   vmetal_texttilemap = tilemap_create(machine, get_vmetal_texttilemap_tile_info,tilemap_scan_rows, 8, 8, 256,256);
400   vmetal_mid1tilemap = tilemap_create(machine, get_vmetal_mid1tilemap_tile_info,tilemap_scan_rows,16,16, 256,256);
401   vmetal_mid2tilemap = tilemap_create(machine, get_vmetal_mid2tilemap_tile_info,tilemap_scan_rows,16,16, 256,256);
402   tilemap_set_transparent_pen(vmetal_texttilemap,15);
403   tilemap_set_transparent_pen(vmetal_mid1tilemap,15);
404   tilemap_set_transparent_pen(vmetal_mid2tilemap,15);
409   metro_state *state = (metro_state *)machine->driver_data;
410
411   state->vmetal_texttilemap = tilemap_create(machine, get_vmetal_texttilemap_tile_info, tilemap_scan_rows,  8,  8, 256, 256);
412   state->vmetal_mid1tilemap = tilemap_create(machine, get_vmetal_mid1tilemap_tile_info, tilemap_scan_rows, 16, 16, 256, 256);
413   state->vmetal_mid2tilemap = tilemap_create(machine, get_vmetal_mid2tilemap_tile_info, tilemap_scan_rows, 16, 16, 256, 256);
414
415   tilemap_set_transparent_pen(state->vmetal_texttilemap, 15);
416   tilemap_set_transparent_pen(state->vmetal_mid1tilemap, 15);
417   tilemap_set_transparent_pen(state->vmetal_mid2tilemap, 15);
405418}
406419
407420static VIDEO_UPDATE(varia)
408421{
422   metro_state *state = (metro_state *)screen->machine->driver_data;
423
409424   bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
410   bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
425   bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
411426
412   tilemap_set_scrollx(vmetal_mid2tilemap,0, vmetal_videoregs[0x06a/2]-64 /*+ vmetal_videoregs[0x066/2]*/);
413   tilemap_set_scrollx(vmetal_mid1tilemap,0, vmetal_videoregs[0x07a/2]-64 /*+ vmetal_videoregs[0x076/2]*/);
414   tilemap_set_scrollx(vmetal_texttilemap,0, -64 /*+ vmetal_videoregs[0x076/2]*/);
427   tilemap_set_scrollx(state->vmetal_mid2tilemap, 0, state->vmetal_videoregs[0x06a/2]-64 /*+ state->vmetal_videoregs[0x066/2]*/);
428   tilemap_set_scrollx(state->vmetal_mid1tilemap, 0, state->vmetal_videoregs[0x07a/2]-64 /*+ state->vmetal_videoregs[0x076/2]*/);
429   tilemap_set_scrollx(state->vmetal_texttilemap, 0, -64 /*+ state->vmetal_videoregs[0x076/2]*/);
415430
416   tilemap_set_scrolly(vmetal_mid2tilemap,0, -64 );
417   tilemap_set_scrolly(vmetal_mid1tilemap,0, -64 );
418   tilemap_set_scrolly(vmetal_texttilemap,0, -64 );
431   tilemap_set_scrolly(state->vmetal_mid2tilemap, 0, -64);
432   tilemap_set_scrolly(state->vmetal_mid1tilemap, 0, -64);
433   tilemap_set_scrolly(state->vmetal_texttilemap, 0, -64);
419434
420   tilemap_draw(bitmap,cliprect,vmetal_mid1tilemap,0,0);
421   tilemap_draw(bitmap,cliprect,vmetal_mid2tilemap,0,0);
422   metro_draw_sprites(screen->machine, bitmap,cliprect);
423   tilemap_draw(bitmap,cliprect,vmetal_texttilemap,0,0);
435   tilemap_draw(bitmap, cliprect, state->vmetal_mid1tilemap, 0, 0);
436   tilemap_draw(bitmap, cliprect, state->vmetal_mid2tilemap, 0, 0);
437   metro_draw_sprites(screen->machine, bitmap, cliprect);
438   tilemap_draw(bitmap, cliprect, state->vmetal_texttilemap, 0, 0);
424439   return 0;
425440}
426441
442
427443static MACHINE_DRIVER_START( varia )
444
445   /* driver data */
446   MDRV_DRIVER_DATA(metro_state)
447
448   /* basic machine hardware */
428449   MDRV_CPU_ADD("maincpu", M68000, 16000000)
429450   MDRV_CPU_PROGRAM_MAP(varia_program_map)
430451   MDRV_CPU_VBLANK_INT("screen", irq1_line_hold) // also level 3
431452
432
453   /* video hardware */
433454   MDRV_SCREEN_ADD("screen", RASTER)
434455   MDRV_SCREEN_REFRESH_RATE(60)
435456   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
r7640r7641
443464   MDRV_VIDEO_START(varia)
444465   MDRV_VIDEO_UPDATE(varia)
445466
467   /* sound hardware */
446468   MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
447469
448470   MDRV_SOUND_ADD("oki", OKIM6295, 1320000)
r7640r7641
494516   ROM_LOAD( "7.u12", 0x00000, 0x200000, CRC(a88c52f1) SHA1(d74a5a11f84ba6b1042b33a2c156a1071b6fbfe1) )
495517ROM_END
496518
497GAME( 1995, vmetal,  0,      varia, varia, 0, ROT270, "Excellent System",                        "Varia Metal",                        GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
498GAME( 1995, vmetaln, vmetal, varia, varia, 0, ROT270, "[Excellent System] New Ways Trading Co.", "Varia Metal (New Ways Trading Co.)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
519GAME( 1995, vmetal,  0,      varia, varia, 0, ROT270, "Excellent System",                        "Varia Metal",                        GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
520GAME( 1995, vmetaln, vmetal, varia, varia, 0, ROT270, "[Excellent System] New Ways Trading Co.", "Varia Metal (New Ways Trading Co.)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
src/mame/drivers/galdrvr.c
r7640r7641
26062606   PORT_BIT( 0xff, 0x00, IPT_UNUSED )
26072607INPUT_PORTS_END
26082608
2609
2609// Note that in moon war, when in cocktail mode, NEITHER player seems to have a hyperflip button? Can someone check the code to see if this is true?
26102610static INPUT_PORTS_START( moonwar_common )
26112611   PORT_START("IN0")
26122612   PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_SPECIAL ) /* the spinner */
2613   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
2613   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // cocktail: p2 shield
26142614   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
26152615   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
26162616
r7640r7641
26222622   PORT_DIPSETTING(    0x03, DEF_STR( Free_Play ) )
26232623   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
26242624   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
2625   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
2626   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 )
2627   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
2628   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
2625   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_CONDITION("IN2", 0x08, PORTCOND_EQUALS, 0x08) // cocktail: p2 thrust
2626   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CONDITION("IN2", 0x08, PORTCOND_EQUALS, 0x00) // upright: p1&p2 hyperflip
2627   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) // both: p1(upright: &p2) shield
2628   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // both: p1(upright: &p2) thrust
2629   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) // both: p1(upright: &p2) fire
26292630INPUT_PORTS_END
26302631
26312632
r7640r7641
26332634   PORT_INCLUDE( moonwar_common )
26342635
26352636   PORT_START("IN2")
2636   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
2637   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // cocktail: p2 fire
26372638   PORT_DIPNAME( 0x06, 0x02, DEF_STR( Coinage ) )
26382639   PORT_DIPSETTING(    0x02, DEF_STR( 1C_1C ) )
26392640   PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) )
r7640r7641
26452646   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )   /* output bits */
26462647
26472648   PORT_START("IN3")      /* IN3/4 - dummy ports for the dial */
2648   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_RESET
26492649
2650   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(4) PORT_REVERSE PORT_RESET PORT_CONDITION("IN2", 0x08, PORTCOND_EQUALS, 0x08) // cocktail: dial is reversed
2651   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(4) PORT_RESET PORT_CONDITION("IN2", 0x08, PORTCOND_EQUALS, 0x00) // upright: dial works normally
2652
26502653   PORT_START("IN4")
2651   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_RESET PORT_COCKTAIL
2654   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(4) PORT_RESET PORT_COCKTAIL PORT_REVERSE // cocktail: dial is reversed
26522655INPUT_PORTS_END
26532656
26542657/* same as above, but coinage is different */
r7640r7641
26562659   PORT_INCLUDE( moonwar_common )
26572660
26582661   PORT_START("IN2")
2659   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
2662   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // cocktail: p2 fire
26602663   PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) )
26612664   PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
26622665   PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
r7640r7641
26682671   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )   /* output bits */
26692672
26702673   PORT_START("IN3")      /* IN3/4 - dummy ports for the dial */
2671   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_RESET
2674   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(4) PORT_RESET // both: p1 dial works normally, p2 dial is reversed, both share same port
26722675
26732676   PORT_START("IN4")      /* doesn't actually work due to bug in game code */
2674   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_RESET PORT_COCKTAIL
2677   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(4) PORT_RESET PORT_COCKTAIL
26752678INPUT_PORTS_END
26762679
26772680static INPUT_PORTS_START( tdpgal )
src/mame/drivers/dwarfd.c
r7640r7641
12041204}
12051205
12061206GAME( 1981, dwarfd,   0,         dwarfd, dwarfd, dwarfd, ORIENTATION_FLIP_Y, "Electro-Sport", "Dwarfs Den",            GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
1207GAME( 1983, quarterh, 0,         dwarfd, dwarfd, dwarfd, ORIENTATION_FLIP_Y, "Electro-Sport", "Quarter Horse (set 1, Pioneer PR-8210)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
1208GAME( 1983, quarterha, quarterh, dwarfd, dwarfd, dwarfd, ORIENTATION_FLIP_Y, "Electro-Sport", "Quarter Horse (set 2, Pioneer PR-8210)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
1209GAME( 1983, quarterhb, quarterh, dwarfd, dwarfd, dwarfd, ORIENTATION_FLIP_Y, "Electro-Sport", "Quarter Horse (set 3, Pioneer LD-V2000)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
1207GAME( 1983, quarterh, 0,         dwarfd, dwarfd, dwarfd, ORIENTATION_FLIP_Y, "Electro-Sport", "Quarter Horse (set 1, Pioneer PR-8210)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
1208GAME( 1983, quarterha, quarterh, dwarfd, dwarfd, dwarfd, ORIENTATION_FLIP_Y, "Electro-Sport", "Quarter Horse (set 2, Pioneer PR-8210)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
1209GAME( 1983, quarterhb, quarterh, dwarfd, dwarfd, dwarfd, ORIENTATION_FLIP_Y, "Electro-Sport", "Quarter Horse (set 3, Pioneer LD-V2000)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
12101210GAME( 1995, qc,       0,         qc,     dwarfd, qc,     ORIENTATION_FLIP_Y, "ArJay Exports/Prestige Games", "Quarter Horse Classic", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
src/mame/drivers/wardner.c
r7640r7641
204204
205205static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 )
206206   ADDRESS_MAP_GLOBAL_MASK(0xff)
207   AM_RANGE(0x00, 0x00) AM_WRITE(wardner_CRTC_reg_sel_w)
208   AM_RANGE(0x02, 0x02) AM_WRITE(wardner_CRTC_data_w)
207   AM_RANGE(0x00, 0x00) AM_DEVWRITE("crtc", mc6845_address_w)
208   AM_RANGE(0x02, 0x02) AM_DEVWRITE("crtc", mc6845_register_w)
209209   AM_RANGE(0x10, 0x13) AM_WRITE(wardner_txscroll_w)      /* scroll text layer */
210210   AM_RANGE(0x14, 0x15) AM_WRITE(wardner_txlayer_w)      /* offset in text video RAM */
211211   AM_RANGE(0x20, 0x23) AM_WRITE(wardner_bgscroll_w)      /* scroll bg layer */
r7640r7641
390390GFXDECODE_END
391391
392392
393
394
393395static MACHINE_DRIVER_START( wardner )
394396
395397   /* basic machine hardware */
396   MDRV_CPU_ADD("maincpu", Z80,24000000/4)         /* 6MHz ??? - Real board crystal is 24MHz */
398   MDRV_CPU_ADD("maincpu", Z80, XTAL_24MHz/4)      /* 6MHz */
397399   MDRV_CPU_PROGRAM_MAP(main_program_map)
398400   MDRV_CPU_IO_MAP(main_io_map)
399401   MDRV_CPU_VBLANK_INT("screen", wardner_interrupt)
400402
401   MDRV_CPU_ADD("audiocpu", Z80,24000000/7)         /* 3.43MHz ??? */
403   MDRV_CPU_ADD("audiocpu", Z80, XTAL_14MHz/4)      /* 3.5MHz */
402404   MDRV_CPU_PROGRAM_MAP(sound_program_map)
403405   MDRV_CPU_IO_MAP(sound_io_map)
404406
405   MDRV_CPU_ADD("dsp", TMS32010,14000000)   /* 14MHz Crystal CLKin */
407   MDRV_CPU_ADD("dsp", TMS32010, XTAL_14MHz)      /* 14MHz Crystal CLKin */
406408   MDRV_CPU_PROGRAM_MAP(DSP_program_map)
407409   /* Data Map is internal to the CPU */
408410   MDRV_CPU_IO_MAP(DSP_io_map)
409411
410   MDRV_QUANTUM_TIME(HZ(6000))               /* 100 CPU slices per frame */
412   MDRV_QUANTUM_TIME(HZ(6000))                  /* 100 CPU slices per frame */
411413
412414   MDRV_MACHINE_RESET(wardner)
413415
414416   /* video hardware */
417   MDRV_MC6845_ADD("crtc", HD6845, XTAL_14MHz/4, twincobr_mc6845_intf)   /* 3.5MHz measured on CLKin */
418
415419   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK | VIDEO_BUFFERS_SPRITERAM)
416420
417421   MDRV_SCREEN_ADD("screen", RASTER)
418   MDRV_SCREEN_REFRESH_RATE(56)
422   MDRV_SCREEN_REFRESH_RATE( (XTAL_14MHz / 2) / (446 * 286) )
419423   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
420424   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
421   MDRV_SCREEN_SIZE(64*8, 32*8)
425   MDRV_SCREEN_SIZE(64*8, 64*8)
422426   MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
423427
424428   MDRV_GFXDECODE(wardner)
r7640r7641
431435   /* sound hardware */
432436   MDRV_SPEAKER_STANDARD_MONO("mono")
433437
434   MDRV_SOUND_ADD("ymsnd", YM3812, 24000000/7)
438   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_14MHz/4)
435439   MDRV_SOUND_CONFIG(ym3812_config)
436440   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
437441MACHINE_DRIVER_END
src/mame/drivers/thunderx.c
r7640r7641
685685   MDRV_DRIVER_DATA(thunderx_state)
686686
687687   /* basic machine hardware */
688   MDRV_CPU_ADD("maincpu", KONAMI, 3000000)   /* 052001 */
688   MDRV_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/8)      /* Verified on pcb, CPU is 052001 */
689689   MDRV_CPU_PROGRAM_MAP(scontra_map)
690690   MDRV_CPU_VBLANK_INT("screen", scontra_interrupt)
691691
692   MDRV_CPU_ADD("audiocpu", Z80, 3579545)      /* ? */
692   MDRV_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz)      /* verified on pcb */
693693   MDRV_CPU_PROGRAM_MAP(scontra_sound_map)
694694
695695   MDRV_MACHINE_START(scontra)
r7640r7641
699699   MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS)
700700
701701   MDRV_SCREEN_ADD("screen", RASTER)
702   MDRV_SCREEN_REFRESH_RATE(60)
702   MDRV_SCREEN_REFRESH_RATE(59.17)            /* verified on pcb */
703703   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
704704   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
705705   MDRV_SCREEN_SIZE(64*8, 32*8)
r7640r7641
716716   /* sound hardware */
717717   MDRV_SPEAKER_STANDARD_MONO("mono")
718718
719   MDRV_SOUND_ADD("ymsnd", YM2151, 3579545)
719   MDRV_SOUND_ADD("ymsnd", YM2151, XTAL_3_579545MHz)   /* verified on pcb */
720720   MDRV_SOUND_ROUTE(0, "mono", 1.0)
721721   MDRV_SOUND_ROUTE(1, "mono", 1.0)
722722
723   MDRV_SOUND_ADD("k007232", K007232, 3579545)
723   MDRV_SOUND_ADD("k007232", K007232, XTAL_3_579545MHz)   /* verified on pcb */
724724   MDRV_SOUND_CONFIG(k007232_config)
725725   MDRV_SOUND_ROUTE(0, "mono", 0.20)
726726   MDRV_SOUND_ROUTE(1, "mono", 0.20)
src/mame/drivers/gei.c
r7640r7641
292292      memory_set_bankptr(space->machine, "bank1", memory_region(space->machine, "bank") + bank*0x8000);
293293}
294294
295static READ8_HANDLER(banksel_1_r)
296{
297   memory_set_bankptr(space->machine, "bank1",memory_region(space->machine, "maincpu") + 0x10000);
298   return 0x03;
299};
300
301static READ8_HANDLER(banksel_2_r)
302{
303   memory_set_bankptr(space->machine, "bank1",memory_region(space->machine, "maincpu") + 0x18000);
304   return 0x03;
305}
306
307static READ8_HANDLER(banksel_3_r)
308{
309   memory_set_bankptr(space->machine, "bank1",memory_region(space->machine, "maincpu") + 0x20000);
310   return 0x03;
311}
312
313static READ8_HANDLER(banksel_4_r)
314{
315   memory_set_bankptr(space->machine, "bank1",memory_region(space->machine, "maincpu") + 0x28000);
316   return 0x03;
317}
318
319static READ8_HANDLER(banksel_5_r)
320{
321   memory_set_bankptr(space->machine, "bank1",memory_region(space->machine, "maincpu") + 0x30000);
322   return 0x03;
323}
324
295325/* This signature is used to validate the ROMs in sportauth. Simple protection check? */
296326static int signature_answer,signature_pos;
297327
r7640r7641
434464   AM_RANGE(0x0000, 0xffff) AM_READ(catchall)
435465ADDRESS_MAP_END
436466
467static ADDRESS_MAP_START( quizvid_map, ADDRESS_SPACE_PROGRAM, 8 )
468   AM_RANGE(0x0000, 0x3fff) AM_ROM
469   AM_RANGE(0x4000, 0x47ff) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
470   AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE("ppi8255_0", ppi8255_r,ppi8255_w)
471   AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE("ppi8255_1", ppi8255_r,ppi8255_w)
472   /* banked ROMs are enabled by low 6 bits of the address */
473   AM_RANGE(0x602f, 0x602f) AM_READ(banksel_5_r)
474   AM_RANGE(0x6037, 0x6037) AM_READ(banksel_4_r)
475   AM_RANGE(0x603b, 0x603b) AM_READ(banksel_3_r)
476   AM_RANGE(0x603d, 0x603d) AM_READ(banksel_2_r)
477   AM_RANGE(0x603e, 0x603e) AM_READ(banksel_1_r)
478   AM_RANGE(0x7800, 0x7fff) AM_ROM /*space for diagnostic ROM?*/
479   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
480   AM_RANGE(0x8000, 0x8002) AM_WRITE(gei_drawctrl_w)
481   AM_RANGE(0xc000, 0xffff) AM_WRITE(gei_bitmap_w)  AM_BASE_GENERIC(videoram)
482   AM_RANGE(0x0000, 0xffff) AM_READ(catchall)
483ADDRESS_MAP_END
437484
438485static ADDRESS_MAP_START( suprpokr_map, ADDRESS_SPACE_PROGRAM, 8 )
439486   AM_RANGE(0x0000, 0x3fff) AM_ROM
r7640r7641
10341081   MDRV_PPI8255_RECONFIG( "ppi8255_1", findout_ppi8255_intf[1] )
10351082MACHINE_DRIVER_END
10361083
1084static MACHINE_DRIVER_START( quizvid )
1085   MDRV_IMPORT_FROM(findout)
1086
1087   MDRV_CPU_MODIFY("maincpu")
1088   MDRV_CPU_PROGRAM_MAP(quizvid_map)
1089MACHINE_DRIVER_END
1090
10371091static MACHINE_DRIVER_START( gselect )
10381092
10391093   /* basic machine hardware */
r7640r7641
16221676   ROM_LOAD( "prom_am27s29pc.bin", 0x0000, 0x0200, CRC(19e3f161) SHA1(52da3c1e50c2329454de14cb9c46149e573e562b) )
16231677ROM_END
16241678
1679ROM_START( quizvid )
1680   ROM_REGION( 0x38000, "maincpu", 0 )
1681   ROM_LOAD( "quiz.rev2a.prg.0",    0x00000, 0x4000, CRC(28e5855a) SHA1(eec16ef7a46451054565c7001478382a0a84725a) )
1682   ROM_LOAD( "quiz.reva.sesso.1",   0x10000, 0x8000, CRC(72367eee) SHA1(09cd8e8c20e159ab78025e4201065c41dde90ef5) )
1683   ROM_LOAD( "quiz.rev2a.sport.2",  0x18000, 0x8000, CRC(1f050838) SHA1(2e44098476d05366b05f7071a615f52b588bcac5) )
1684   ROM_LOAD( "quiz.rev2a.musica.3", 0x20000, 0x8000, CRC(6ae39e6b) SHA1(b5ce2678c07d6c1d3d49f1703e2b9f84105e88fa) )
1685   ROM_LOAD( "quiz.reva.storia.4",  0x28000, 0x8000, CRC(1c648781) SHA1(e363ae1a3946446c0bc42f9857a9d66702cb3367) )
1686   ROM_LOAD( "quiz.reva.attuale.5", 0x30000, 0x8000, CRC(a3642478) SHA1(57851aabc6d2f5acff426c09574559e141da5d13) )
1687
1688   ROM_REGION( 0x0104, "plds", 0 )
1689   ROM_LOAD( "pal10l8cn.pal1",            0x0000, 0x002c, CRC(7f4499de) SHA1(74838150d0b71171f00f65e03748b262c2bb6e4c) )
1690   ROM_LOAD( "pal10l8cn.pal4",            0x0000, 0x002c, CRC(f14a34ab) SHA1(78af7f5eafbf2d52ee7b01b497ad59448c986693) )
1691   ROM_LOAD( "pal16l8a-2.bad.dump",       0x0000, 0x0104, BAD_DUMP CRC(e9cd78fb) SHA1(557d3e7ef3b25c1338b24722cac91bca788c02b8) )
1692   ROM_LOAD( "pal16l8cn.pal3.bad.dump",   0x0000, 0x0104, BAD_DUMP CRC(e9cd78fb) SHA1(557d3e7ef3b25c1338b24722cac91bca788c02b8) )
1693   ROM_LOAD( "pal16l8cn.pal5.bad.dump",   0x0000, 0x0104, BAD_DUMP CRC(e9cd78fb) SHA1(557d3e7ef3b25c1338b24722cac91bca788c02b8) )
1694ROM_END
1695
16251696ROM_START( quiz211 )
16261697   ROM_REGION( 0x38000, "maincpu", 0 )
16271698   ROM_LOAD( "1a.bin",         0x000000, 0x4000, CRC(116de0ea) SHA1(9af97b100aa2c79a58de055abe726d6e2e00aab4) )
r7640r7641
17721843
17731844GAME( 1986, quiz,     0,        findout,  quiz,     0,       ROT0, "Italian bootleg",       "Quiz (Revision 2)",                       GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
17741845
1846GAME( 1986, quizvid,  0,        quizvid,  quiz,     0,       ROT0, "Greyhound Electronics", "Video Quiz",                              GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
1847
17751848GAME( 1986, reelfun,  0,        findout,  reelfun,  0,       ROT0, "Grayhound Electronics", "Reel Fun (Version 7.01)",                 GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
17761849GAME( 1987, findout,  0,        findout,  findout,  0,       ROT0, "Elettronolo",           "Find Out (Version 4.04)",                 GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
17771850
src/mame/drivers/ultrsprt.c
r7640r7641
254254   ROM_REGION(0x100000, "konami", 0)   /* Sound roms */
255255   ROM_LOAD("479_a06.bin", 0x000000, 0x80000, CRC(8d6ac8a2) SHA1(7c4b8bd47cddc766cbdb6a486acc9221be55b579))
256256   ROM_LOAD("479_a07.bin", 0x080000, 0x80000, CRC(75835df8) SHA1(105b95c16f2ce6902c2e4c9c2fd9f2f7a848c546))
257
258   ROM_REGION16_BE( 0x80, "eeprom", 0 )
259   ROM_LOAD( "fiveside.nv", 0x0000, 0x0080, CRC(aad11072) SHA1(8f777ee47801faa7ce8420c3052034720225aae7) )
257260ROM_END
258261
259262GAME(1995, fiveside, 0, ultrsprt, ultrsprt, 0, ROT90, "Konami", "Five a Side Soccer (ver UAA)", GAME_IMPERFECT_SOUND)
src/mame/drivers/twincobr.c
r7640r7641
1391397e000-7e005 read data from video RAM (see below)
140140
141141write:
14260000-60003 CRT 6845 controller. 0 = register offset , 2 = register data
14260000-60003 CRTC HD6845 or UM6845B. 0 = register offset , 2 = register data
14314370000-70001 scroll   y   for character page (centre normally 0x01c9)
14414470002-70003 scroll < x > for character page (centre normally 0x00e2)
14514570004-70005 offset in character page to write character (7e000)
r7640r7641
261261#include "cpu/z80/z80.h"
262262#include "cpu/m68000/m68000.h"
263263#include "cpu/tms32010/tms32010.h"
264#include "cpu/mcs48/mcs48.h"
264265#include "includes/toaplipt.h"
265266#include "includes/twincobr.h"
266267#include "sound/3812intf.h"
r7640r7641
268269
269270
270271
271
272272/***************************** 68000 Memory Map *****************************/
273273
274274static ADDRESS_MAP_START( main_program_map, ADDRESS_SPACE_PROGRAM, 16 )
r7640r7641
276276   AM_RANGE(0x030000, 0x033fff) AM_RAM      /* 68K and DSP shared RAM */
277277   AM_RANGE(0x040000, 0x040fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
278278   AM_RANGE(0x050000, 0x050dff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
279   AM_RANGE(0x060000, 0x060001) AM_WRITE(twincobr_crtc_reg_sel_w)   /* 6845 CRT controller */
280   AM_RANGE(0x060002, 0x060003) AM_WRITE(twincobr_crtc_data_w)      /* 6845 CRT controller */
279   AM_RANGE(0x060000, 0x060001) AM_DEVWRITE("crtc", mc6845_address_w)
280   AM_RANGE(0x060002, 0x060003) AM_DEVWRITE("crtc", mc6845_register_w)
281281   AM_RANGE(0x070000, 0x070003) AM_WRITE(twincobr_txscroll_w)   /* text layer scroll */
282282   AM_RANGE(0x070004, 0x070005) AM_WRITE(twincobr_txoffs_w)   /* offset in text video RAM */
283283   AM_RANGE(0x072000, 0x072003) AM_WRITE(twincobr_bgscroll_w)   /* bg layer scroll */
r7640r7641
333333ADDRESS_MAP_END
334334
335335
336/******************* Flying Shark Bootleg i8741 Memory Map *******************/
336337
338static ADDRESS_MAP_START( fsharkbt_i8741_io_map, ADDRESS_SPACE_IO, 8 )
339   /* IO map unknown as program code isn't dumped */
340ADDRESS_MAP_END
337341
342   /* $000 - 3fF  I8741 Internal Program ROM Address Space */
343
344
338345/*****************************************************************************
339346    Input Port definitions
340347*****************************************************************************/
r7640r7641
527534};
528535
529536static GFXDECODE_START( twincobr )
530   GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout,   1536, 32 )   /* colors 1536-1791 */
531   GFXDECODE_ENTRY( "gfx2", 0x00000, tilelayout,   1280, 16 )   /* colors 1280-1535 */
532   GFXDECODE_ENTRY( "gfx3", 0x00000, tilelayout,   1024, 16 )   /* colors 1024-1079 */
533   GFXDECODE_ENTRY( "gfx4", 0x00000, spritelayout,      0, 64 )   /* colors    0-1023 */
537   GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout,   1536, 32 )   /* colors 1536-1791 */
538   GFXDECODE_ENTRY( "gfx2", 0x00000, tilelayout,   1280, 16 )   /* colors 1280-1535 */
539   GFXDECODE_ENTRY( "gfx3", 0x00000, tilelayout,   1024, 16 )   /* colors 1024-1079 */
540   GFXDECODE_ENTRY( "gfx4", 0x00000, spritelayout,    0, 64 )   /* colors    0-1023 */
534541GFXDECODE_END
535542
536543
537544
545
538546/* handler called by the 3812 emulator when the internal timers cause an IRQ */
539547static void irqhandler(running_device *device, int linestate)
540548{
r7640r7641
551559static MACHINE_DRIVER_START( twincobr )
552560
553561   /* basic machine hardware */
554   MDRV_CPU_ADD("maincpu", M68000,28000000/4)         /* 7.0MHz - Main board Crystal is 28MHz */
562   MDRV_CPU_ADD("maincpu", M68000, XTAL_28MHz/4)      /* 7MHz - Main board Crystal is 28MHz */
555563   MDRV_CPU_PROGRAM_MAP(main_program_map)
556564   MDRV_CPU_VBLANK_INT("screen", twincobr_interrupt)
557565
558   MDRV_CPU_ADD("audiocpu", Z80,28000000/8)         /* 3.5MHz */
566   MDRV_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)         /* 3.5MHz */
559567   MDRV_CPU_PROGRAM_MAP(sound_program_map)
560568   MDRV_CPU_IO_MAP(sound_io_map)
561569
562   MDRV_CPU_ADD("dsp", TMS32010,28000000/2)   /* 14MHz CLKin */
570   MDRV_CPU_ADD("dsp", TMS32010, XTAL_28MHz/2)         /* 14MHz CLKin */
563571   MDRV_CPU_PROGRAM_MAP(DSP_program_map)
564572   /* Data Map is internal to the CPU */
565573   MDRV_CPU_IO_MAP(DSP_io_map)
566574
567575   MDRV_QUANTUM_TIME(HZ(6000))
568576
569   MDRV_MACHINE_RESET(twincobr)   /* Reset fshark bootleg 8741 MCU data */
577   MDRV_MACHINE_RESET(twincobr)
570578
571579   /* video hardware */
580   MDRV_MC6845_ADD("crtc", HD6845, XTAL_28MHz/8, twincobr_mc6845_intf)   /* 3.5MHz measured on CLKin */
581
572582   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK | VIDEO_BUFFERS_SPRITERAM)
573583
574584   MDRV_SCREEN_ADD("screen", RASTER)
575   MDRV_SCREEN_REFRESH_RATE( (28000000.0 / 4) / (446 * 286) )
585   MDRV_SCREEN_REFRESH_RATE( (XTAL_28MHz / 4) / (446 * 286) )
576586   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
577587   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
578588   MDRV_SCREEN_SIZE(64*8, 64*8)
r7640r7641
588598   /* sound hardware */
589599   MDRV_SPEAKER_STANDARD_MONO("mono")
590600
591   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
601   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
592602   MDRV_SOUND_CONFIG(ym3812_config)
593603   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
594604MACHINE_DRIVER_END
595605
596606
607static MACHINE_DRIVER_START( fsharkbt )
608   MDRV_IMPORT_FROM( twincobr )
597609
610   MDRV_CPU_ADD("mcu", I8741, XTAL_28MHz/16)
611   /* Program Map is internal to the CPU */
612   MDRV_CPU_IO_MAP(fsharkbt_i8741_io_map)
613   MDRV_CPU_FLAGS(CPU_DISABLE)      /* Internal program code is not dumped */
614
615   MDRV_MACHINE_RESET(fsharkbt)   /* Reset fshark bootleg 8741 MCU data */
616MACHINE_DRIVER_END
617
618
619
620
598621/***************************************************************************
599622
600623  Game driver(s)
r7640r7641
741764   ROM_LOAD( "82s123.b24",   0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) )   /* tile to sprite priority ?? */
742765ROM_END
743766
744ROM_START( gulfwar2 )
745   ROM_REGION( 0x40000, "maincpu", 0 )   /* Main 68K code */
746   ROM_LOAD16_BYTE( "08-u119.bin", 0x00000, 0x20000, CRC(41ebf9c0) SHA1(85207dda76abded727ed95717024a2ea2bd85dac) )
747   ROM_LOAD16_BYTE( "07-u92.bin",  0x00001, 0x20000, CRC(b73e6b25) SHA1(53cde41e5a2e8f721c3f43abf1fff46479f658d8) )
748
749   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound Z80 code */
750   ROM_LOAD( "06-u51.bin", 0x00000, 0x08000, CRC(75504f95) SHA1(5bd23e700e1bd4f0fac622dfb7c8cc69ba764956) )
751
752   ROM_REGION( 0x2000, "dsp", 0 )   /* Co-Processor TMS320C10 MCU code */
753   /* ROMs are duplicated 4 times */
754   ROM_LOAD16_BYTE( "01-u2.rom", 0x000, 0x800, CRC(01399b65) SHA1(4867ec815e22c9124c7aa00ebb6089c2611fa31f) ) // Same code as Twin Cobra
755   ROM_CONTINUE(                 0x000, 0x800 )
756   ROM_CONTINUE(                 0x000, 0x800 )
757   ROM_CONTINUE(                 0x000, 0x800 )
758   ROM_LOAD16_BYTE( "02-u1.rom", 0x001, 0x800, CRC(abefe4ca) SHA1(f05f12a1ff19411f34f4eee98ce9ba450fec38f2) ) // Same code as Twin Cobra
759   ROM_CONTINUE(                 0x001, 0x800 )
760   ROM_CONTINUE(                 0x001, 0x800 )
761   ROM_CONTINUE(                 0x001, 0x800 )
762
763   ROM_REGION( 0x0c000, "gfx1", 0 )   /* chars */
764   ROM_LOAD( "03-u9.bin",   0x00000, 0x04000, CRC(1b7934b3) SHA1(c7f5ac364dec4c7843c30e098fd02e0901bdf4b7) )
765   ROM_LOAD( "04-u10.bin", 0x04000, 0x04000, CRC(6f7bfb58) SHA1(4c5602668938a52321b70cd971326fe1a4930889) )
766   ROM_LOAD( "05-u11.bin", 0x08000, 0x04000, CRC(31814724) SHA1(bdcf270e6219555a7f776167f6bf971c6ff18a83) )
767
768   ROM_REGION( 0x40000, "gfx2", 0 )   /* fg tiles */
769   ROM_LOAD( "16-u202.bin", 0x00000, 0x10000, CRC(d815d175) SHA1(917043d0731226d18bcc22dfe27e5a5a18b03c06) )
770   ROM_LOAD( "13-u199.bin", 0x10000, 0x10000, CRC(d949b0d9) SHA1(1974d3b54e082baa9084dd619c8a879d954644cd) )
771   ROM_LOAD( "14-u200.bin", 0x20000, 0x10000, CRC(c109a6ac) SHA1(3a13ec802e5bafcf599c273a0bb0fd078e01e171) )
772   ROM_LOAD( "15-u201.bin", 0x30000, 0x10000, CRC(ad21f2ab) SHA1(0ab6eeb4dc9c2531c6f19479e7f9bc54fc1c1fdf) )
773
774   ROM_REGION( 0x20000, "gfx3", 0 )   /* bg tiles */
775   ROM_LOAD( "09-u195.bin", 0x00000, 0x08000, CRC(b7be3a6d) SHA1(68b9223fd07e81d443a1ae3ff04b2af105b27548) )
776   ROM_LOAD( "12-u198.bin", 0x08000, 0x08000, CRC(fd7032a6) SHA1(8be6315d732b154163a3573e2017fdfc77c92e54) )
777   ROM_LOAD( "11-u197.bin", 0x10000, 0x08000, CRC(7b721ed3) SHA1(afd10229414c65a56e184d56a69460ca3a502a27) )
778   ROM_LOAD( "10-u196.rom", 0x18000, 0x08000, CRC(160f38ab) SHA1(da310ec387d439b26c8b6b881e5dcc07c2b9bb00) )
779
780   ROM_REGION( 0x40000, "gfx4", 0 )   /* sprites */
781   ROM_LOAD( "20-u262.bin", 0x00000, 0x10000, CRC(10665ca0) SHA1(0c552c3807e00a7ef4f9fd28c7988a232628a1f5) )
782   ROM_LOAD( "19-u261.bin", 0x10000, 0x10000, CRC(cfa6d417) SHA1(f6c17d938b58dc5756ecf617f00fbfaf701602a7) )
783   ROM_LOAD( "18-u260.bin", 0x20000, 0x10000, CRC(2e6a0c49) SHA1(0b7ddad8775dcebe240a8246ef7816113f517f87) )
784   ROM_LOAD( "17-u259.bin", 0x30000, 0x10000, CRC(66c1b0e6) SHA1(82f3659245913f835c4434131c179b49ee195961) )
785
786   ROM_REGION( 0x260, "proms", 0 )
787   ROM_LOAD( "82s129.d3",   0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) )   /* sprite priority control ?? */
788   ROM_LOAD( "82s129.d4",   0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) )   /* sprite priority control ?? */
789   ROM_LOAD( "82s123.d2",   0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) )   /* sprite control ?? */
790   ROM_LOAD( "82s123.e18",   0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) )   /* sprite attribute (flip/position) ?? */
791   ROM_LOAD( "82s123.b24",   0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) )   /* tile to sprite priority ?? */
792ROM_END
793
794767ROM_START( fshark )
795768   ROM_REGION( 0x30000, "maincpu", 0 )   /* Main 68K code */
796769   ROM_LOAD16_BYTE( "b02_18-1.m8", 0x00000, 0x10000, CRC(04739e02) SHA1(8a14284adb0f0f33adf9affdec081c90de85d594) )
r7640r7641
947920   ROM_LOAD( "b02_16.l5", 0x0000, 0x8000, CRC(cdd1a153) SHA1(de9827a959039cf753ecac6756fb1925c37466d8) )
948921
949922   ROM_REGION( 0x2000, "dsp", 0 )   /* Co-Processor TMS320C10 MCU code */
950   /* FIXME : DSP ROMS from 'hishouza' (the only way to play the game) */
951   ROMX_LOAD( "dsp-a1.bpr", 0x0000, 0x0400, CRC(45d4d1b1) SHA1(e776a056f0f72cbeb309c5a23f803330cb8b3763), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
952   ROMX_LOAD( "dsp-a2.bpr", 0x0000, 0x0400, CRC(edd227fa) SHA1(34aba84b5216ecbe462e7166d0f66785ca049a34), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
953   ROMX_LOAD( "dsp-a3.bpr", 0x0001, 0x0400, CRC(df88e79b) SHA1(661b057fa2eef37b9d794151381d7d74a7bfa93a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
954   ROMX_LOAD( "dsp-a4.bpr", 0x0001, 0x0400, CRC(a2094a7f) SHA1(0f1c173643046c76aa89eab66fba6ea51c3f2223), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
955   ROMX_LOAD( "dsp-b5.bpr", 0x0800, 0x0400, CRC(85ca5d47) SHA1(3c6e21e2897fd35834021ec9f81f57bebfd13ef8), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
956   ROMX_LOAD( "dsp-b6.bpr", 0x0800, 0x0400, CRC(81816b2c) SHA1(1e58ab7aef2a34f42267debf4cad9558d5e14159), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
957   ROMX_LOAD( "dsp-b7.bpr", 0x0801, 0x0400, CRC(e87540cd) SHA1(bb6e98c47ed46abbbfa06571806cb2d663880419), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
958   ROMX_LOAD( "dsp-b8.bpr", 0x0801, 0x0400, CRC(d3c16c5c) SHA1(a24d9536914734c1875c8a39938a346ff4418dd0), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
923   ROMX_LOAD( "mcu-1.bpr",  0x0000, 0x0400, CRC(45d4d1b1) SHA1(e776a056f0f72cbeb309c5a23f803330cb8b3763), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
924   ROMX_LOAD( "mcu-2.bpr",  0x0000, 0x0400, CRC(651336d1) SHA1(3c968d5cb58abe35794b7c88520a22fc0b45a449), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
925   ROMX_LOAD( "mcu-3.bpr",  0x0001, 0x0400, CRC(df88e79b) SHA1(661b057fa2eef37b9d794151381d7d74a7bfa93a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
926   ROMX_LOAD( "mcu-4.bpr",  0x0001, 0x0400, CRC(a2094a7f) SHA1(0f1c173643046c76aa89eab66fba6ea51c3f2223), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
927   ROMX_LOAD( "mcu-5.bpr",  0x0800, 0x0400, CRC(f97a58da) SHA1(77a659943d95d5b859fab50f827f11222c3dbf1f), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
928   ROMX_LOAD( "mcu-6.bpr",  0x0800, 0x0400, CRC(ffcc422d) SHA1(9b4331e8bb5fe37bb8efcccc500a1d7cd026bf93), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
929   ROMX_LOAD( "mcu-7.bpr",  0x0801, 0x0400, CRC(0cd30d49) SHA1(65d65a199bfb740b94af19843640e625a5e67f46), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) )
930   ROMX_LOAD( "mcu-8.bpr",  0x0801, 0x0400, CRC(3379bbff) SHA1(2f577b8de6d523087b472691cdde2eb525877878), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) )
959931
932   ROM_REGION( 0x0400, "mcu", 0 )   /* i8741a MCU */
933   ROM_LOAD( "fsb_8741.mcu", 0x0000, 0x0400, NO_DUMP )
934
960935   ROM_REGION( 0x0c000, "gfx1", 0 )   /* chars */
961936   ROM_LOAD( "b02_07-1.h11", 0x00000, 0x04000, CRC(e669f80e) SHA1(05c1a4ff9adaa6c8035f38a76c5ee333fafba2bf) )
962937   ROM_LOAD( "b02_06-1.h10", 0x04000, 0x04000, CRC(5e53ae47) SHA1(55bde4133deebb59a87d9b96c6d0fd7b4bbc0e02) )
r7640r7641
980955   ROM_LOAD( "b02_03.d17", 0x20000, 0x10000, CRC(64f3d88f) SHA1(d0155cfb0a8885d58e34141f9696b9aa208440ca) )
981956   ROM_LOAD( "b02_04.d20", 0x30000, 0x10000, CRC(3b23a9fc) SHA1(2ac34445618e17371b5eed7eb6f43da4dbb99e28) )
982957
983   ROM_REGION( 0x260, "proms", 0 )   /* nibble bproms, lo/hi order to be determined */
984   ROM_LOAD( "b02-20.b4",  0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* bprom type: 82s129AN - sprite priority control ?? */
985   ROM_LOAD( "b02-19.b5",  0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* bprom type: 82s129AN - sprite priority control ?? */
986   ROM_LOAD( "b02-21.b2",  0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) ) /* bprom type: 82s123AN - sprite control ?? */
987   ROM_LOAD( "b02-22.c21", 0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* bprom type: 82s123AN - sprite attribute (flip/position) ?? */
988   ROM_LOAD( "b02-23.f28", 0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) ) /* bprom type: 82s123AN - tile to sprite priority ?? */
958   ROM_REGION( 0x300, "proms", 0 )   /* nibble bproms, lo/hi order to be determined */
959   ROM_LOAD( "clr2.bpr",   0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) )   /* sprite priority control ?? */
960   ROM_LOAD( "clr1.bpr",   0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) )   /* sprite priority control ?? */
961   ROM_LOAD( "clr3.bpr",   0x200, 0x100, CRC(016fe2f7) SHA1(909f815a61e759fdf998674ee383512ecd8fee65) )   /* ?? */
989962ROM_END
990963
964ROM_START( gulfwar2 )
965   ROM_REGION( 0x40000, "maincpu", 0 )   /* Main 68K code */
966   ROM_LOAD16_BYTE( "08-u119.bin", 0x00000, 0x20000, CRC(41ebf9c0) SHA1(85207dda76abded727ed95717024a2ea2bd85dac) )
967   ROM_LOAD16_BYTE( "07-u92.bin",  0x00001, 0x20000, CRC(b73e6b25) SHA1(53cde41e5a2e8f721c3f43abf1fff46479f658d8) )
991968
969   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound Z80 code */
970   ROM_LOAD( "06-u51.bin", 0x00000, 0x08000, CRC(75504f95) SHA1(5bd23e700e1bd4f0fac622dfb7c8cc69ba764956) )
971
972   ROM_REGION( 0x2000, "dsp", 0 )   /* Co-Processor TMS320C10 MCU code */
973   /* ROMs are duplicated 4 times */
974   ROM_LOAD16_BYTE( "01-u2.rom", 0x000, 0x800, CRC(01399b65) SHA1(4867ec815e22c9124c7aa00ebb6089c2611fa31f) ) // Same code as Twin Cobra
975   ROM_CONTINUE(                 0x000, 0x800 )
976   ROM_CONTINUE(                 0x000, 0x800 )
977   ROM_CONTINUE(                 0x000, 0x800 )
978   ROM_LOAD16_BYTE( "02-u1.rom", 0x001, 0x800, CRC(abefe4ca) SHA1(f05f12a1ff19411f34f4eee98ce9ba450fec38f2) ) // Same code as Twin Cobra
979   ROM_CONTINUE(                 0x001, 0x800 )
980   ROM_CONTINUE(                 0x001, 0x800 )
981   ROM_CONTINUE(                 0x001, 0x800 )
982
983   ROM_REGION( 0x0c000, "gfx1", 0 )   /* chars */
984   ROM_LOAD( "03-u9.bin",   0x00000, 0x04000, CRC(1b7934b3) SHA1(c7f5ac364dec4c7843c30e098fd02e0901bdf4b7) )
985   ROM_LOAD( "04-u10.bin", 0x04000, 0x04000, CRC(6f7bfb58) SHA1(4c5602668938a52321b70cd971326fe1a4930889) )
986   ROM_LOAD( "05-u11.bin", 0x08000, 0x04000, CRC(31814724) SHA1(bdcf270e6219555a7f776167f6bf971c6ff18a83) )
987
988   ROM_REGION( 0x40000, "gfx2", 0 )   /* fg tiles */
989   ROM_LOAD( "16-u202.bin", 0x00000, 0x10000, CRC(d815d175) SHA1(917043d0731226d18bcc22dfe27e5a5a18b03c06) )
990   ROM_LOAD( "13-u199.bin", 0x10000, 0x10000, CRC(d949b0d9) SHA1(1974d3b54e082baa9084dd619c8a879d954644cd) )
991   ROM_LOAD( "14-u200.bin", 0x20000, 0x10000, CRC(c109a6ac) SHA1(3a13ec802e5bafcf599c273a0bb0fd078e01e171) )
992   ROM_LOAD( "15-u201.bin", 0x30000, 0x10000, CRC(ad21f2ab) SHA1(0ab6eeb4dc9c2531c6f19479e7f9bc54fc1c1fdf) )
993
994   ROM_REGION( 0x20000, "gfx3", 0 )   /* bg tiles */
995   ROM_LOAD( "09-u195.bin", 0x00000, 0x08000, CRC(b7be3a6d) SHA1(68b9223fd07e81d443a1ae3ff04b2af105b27548) )
996   ROM_LOAD( "12-u198.bin", 0x08000, 0x08000, CRC(fd7032a6) SHA1(8be6315d732b154163a3573e2017fdfc77c92e54) )
997   ROM_LOAD( "11-u197.bin", 0x10000, 0x08000, CRC(7b721ed3) SHA1(afd10229414c65a56e184d56a69460ca3a502a27) )
998   ROM_LOAD( "10-u196.rom", 0x18000, 0x08000, CRC(160f38ab) SHA1(da310ec387d439b26c8b6b881e5dcc07c2b9bb00) )
999
1000   ROM_REGION( 0x40000, "gfx4", 0 )   /* sprites */
1001   ROM_LOAD( "20-u262.bin", 0x00000, 0x10000, CRC(10665ca0) SHA1(0c552c3807e00a7ef4f9fd28c7988a232628a1f5) )
1002   ROM_LOAD( "19-u261.bin", 0x10000, 0x10000, CRC(cfa6d417) SHA1(f6c17d938b58dc5756ecf617f00fbfaf701602a7) )
1003   ROM_LOAD( "18-u260.bin", 0x20000, 0x10000, CRC(2e6a0c49) SHA1(0b7ddad8775dcebe240a8246ef7816113f517f87) )
1004   ROM_LOAD( "17-u259.bin", 0x30000, 0x10000, CRC(66c1b0e6) SHA1(82f3659245913f835c4434131c179b49ee195961) )
1005
1006   ROM_REGION( 0x260, "proms", 0 )
1007   ROM_LOAD( "82s129.d3",   0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) )   /* sprite priority control ?? */
1008   ROM_LOAD( "82s129.d4",   0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) )   /* sprite priority control ?? */
1009   ROM_LOAD( "82s123.d2",   0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) )   /* sprite control ?? */
1010   ROM_LOAD( "82s123.e18",   0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) )   /* sprite attribute (flip/position) ?? */
1011   ROM_LOAD( "82s123.b24",   0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) )   /* tile to sprite priority ?? */
1012ROM_END
1013
1014
1015
9921016static DRIVER_INIT( twincobr )
9931017{
9941018   twincobr_driver_savestate(machine);
9951019}
9961020
9971021
1022GAME( 1987, fshark,    0,        twincobr, fshark,    twincobr, ROT270, "[Toaplan] Taito Corporation", "Flying Shark (World)", 0 )
1023GAME( 1987, skyshark,  fshark,   twincobr, skyshark,  twincobr, ROT270, "[Toaplan] Taito America Corporation (Romstar license)", "Sky Shark (US)", 0 )
1024GAME( 1987, hishouza,  fshark,   twincobr, hishouza,  twincobr, ROT270, "[Toaplan] Taito Corporation", "Hishou Zame (Japan)", 0 )
1025GAME( 1987, fsharkbt,  fshark,   fsharkbt, skyshark,  twincobr, ROT270, "bootleg", "Flying Shark (bootleg)", 0 )
9981026GAME( 1987, twincobr,  0,        twincobr, twincobr,  twincobr, ROT270, "[Toaplan] Taito Corporation", "Twin Cobra (World)", 0 )
9991027GAME( 1987, twincobru, twincobr, twincobr, twincobru, twincobr, ROT270, "[Toaplan] Taito America Corporation (Romstar license)", "Twin Cobra (US)", 0 )
10001028GAME( 1987, ktiger,    twincobr, twincobr, ktiger,    twincobr, ROT270, "[Toaplan] Taito Corporation", "Kyukyoku Tiger (Japan)", 0 )
10011029GAME( 1991, gulfwar2,  0,        twincobr, gulfwar2,  twincobr, ROT270, "Comad", "Gulf War II", 0 )
1002
1003GAME( 1987, fshark,    0,        twincobr, fshark,    twincobr, ROT270, "[Toaplan] Taito Corporation", "Flying Shark (World)", 0 )
1004GAME( 1987, skyshark,  fshark,   twincobr, skyshark,  twincobr, ROT270, "[Toaplan] Taito America Corporation (Romstar license)", "Sky Shark (US)", 0 )
1005GAME( 1987, hishouza,  fshark,   twincobr, hishouza,  twincobr, ROT270, "[Toaplan] Taito Corporation", "Hishou Zame (Japan)", 0 )
1006GAME( 1987, fsharkbt,  fshark,   twincobr, skyshark,  twincobr, ROT270, "bootleg", "Flying Shark (bootleg)", 0 )
src/mame/drivers/namcofl.c
r7640r7641
22    Namco System FL
33    Driver by R. Belmont and ElSemi
44
5    IMPORTANT
5    IMPORTANT (for Manual Calibration, MAME now loads these defaults instead)
66    ---------
77    To calibrate the steering, do the following:
88    1) Delete the .nv file
99    2) Start the game.  Speed Racer will guide you through the calibration
10       (the "jump button" is the same as player 1 start).
10       (the "jump button" is mapped to Space).
1111       For Final Lap R, hold down service (9) and tap test (F2).  If you do
1212       not get an "initializing" message followed by the input test, keep doing
1313       it until you do.
r7640r7641
163163#include "cpu/i960/i960.h"
164164#include "cpu/m37710/m37710.h"
165165#include "sound/c352.h"
166#include "namcofl.lh"
166167
167168
168169static emu_timer *raster_interrupt_timer;
r7640r7641
353354ADDRESS_MAP_END
354355
355356
356static INPUT_PORTS_START( namcofl )
357static INPUT_PORTS_START( speedrcr )
357358   PORT_START("MISC")
358359   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
359360   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
r7640r7641
362363   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
363364   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
364365   PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
366   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // enters pages in test menu
367
368   PORT_START("IN0")
369   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
370   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
371   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
372   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
373   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
374   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
375   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
376   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
377
378   PORT_START("IN1")
379   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
380   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
381   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
382   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
383   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no gear button on this
384   PORT_DIPNAME( 0x20, 0x20, "Freeze Screen" )
385   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
386   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
387   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
388   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
389
390   PORT_START("IN2")
391   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
392   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
393   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
394   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) // buttons are named because their use in navigating test mode isn't clear
395   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Weapon 1 / Test Menu Down") PORT_CODE(KEYCODE_C)
396   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Weapon 2 / Test Menu Modify") PORT_CODE(KEYCODE_Z)
397   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Weapon 3 / Test Menu Up") PORT_CODE(KEYCODE_X)
398   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Start / Jump") PORT_CODE(KEYCODE_SPACE) // jump / start button
399
400   PORT_START("IN3")
401   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
402   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
403   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
404   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
405   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
406   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
407   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
408   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
409
410   PORT_START("ACCEL")
411   PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20)
412
413   PORT_START("BRAKE")
414   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // no brake
415
416   PORT_START("WHEEL")
417   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(4)
418INPUT_PORTS_END
419
420
421static INPUT_PORTS_START( finalapr )
422   PORT_START("MISC")
423   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
424   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
425   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
426   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
427   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
428   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
429   PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
365430   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
366431
367432   PORT_START("IN0")
r7640r7641
379444   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
380445   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
381446   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
382   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_TOGGLE
447   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gear Change") PORT_CODE(KEYCODE_LSHIFT) PORT_TOGGLE // gear
383448   PORT_DIPNAME( 0x20, 0x20, "Freeze Screen" )
384449   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
385450   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r7640r7641
391456   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
392457   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
393458   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
394   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
395   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
396   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
397   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
459   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
460   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
461   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
462   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // freezes the game
398463
399464   PORT_START("IN3")
400465   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
r7640r7641
407472   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
408473
409474   PORT_START("ACCEL")
410   PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
475   PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(6)
411476
412477   PORT_START("BRAKE")
413   PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
478   PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(6)
414479
415480   PORT_START("WHEEL")
416   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
481   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(6)
417482INPUT_PORTS_END
418483
484
419485static const gfx_layout obj_layout =
420486{
421487   16,16,
r7640r7641
516582{
517583   timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, video_screen_get_visible_area(machine->primary_screen)->max_y + 3, 0), NULL, 0, network_interrupt_callback);
518584   timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, video_screen_get_visible_area(machine->primary_screen)->max_y + 1, 0), NULL, 0, vblank_interrupt_callback);
585
586   memory_set_bankptr(machine,  "bank1", memory_region(machine, "maincpu") );
587   memory_set_bankptr(machine,  "bank2", namcofl_workram );
588
589   memset(namcofl_workram, 0x00, 0x100000);
519590}
520591
521592
r7640r7641
601672    ROM_LOAD( "sysfl-3.bin",  0x000000, 0x000001, NO_DUMP ) /* PALCE16V8H-15PC/4 at 12S */
602673    ROM_LOAD( "sysfl-4.bin",  0x000000, 0x000001, NO_DUMP ) /* PAL20L8BCNS at 20N */
603674    ROM_LOAD( "sysfl-5.bin",  0x000000, 0x000001, NO_DUMP ) /* PALCE16V8H-15PC/4 at 19D */
675
676   ROM_REGION( 0x2000, "nvram", 0 ) // default settings, including calibration
677   ROM_LOAD("speedrcr.nv",   0x000000, 0x2000, CRC(58b41c70) SHA1(c30ea7f4951ce208781deafef8d99bdb4902e5b8) )
604678ROM_END
605679
606ROM_START( finalaprb )
680
681
682
683ROM_START( finalapr )
607684   ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program
608685   ROM_LOAD32_WORD("flr2mpeb.19a",   0x000000, 0x080000, CRC(8bfe615f) SHA1(7b867eb261268a83177f1f873689f77d1b6c47ca) )
609686   ROM_LOAD32_WORD("flr2mpob.18a",   0x000002, 0x080000, CRC(91c14e4f) SHA1(934a86daaef0e3e2c2b3066f4677ccb3aaab6eaf) )
r7640r7641
640717
641718   ROM_REGION( 0x200000, "c352", 0 ) // Samples
642719   ROM_LOAD("flr1voi.23s",   0x000000, 0x200000, CRC(ff6077cd) SHA1(73c289125ddeae3e43153e4c570549ca04501262) )
720
721   ROM_REGION( 0x2000, "nvram", 0 ) // default settings, including calibration
722   ROM_LOAD("finalapr.nv",   0x000000, 0x2000, CRC(d51d65fe) SHA1(8a0a523cb6ba2880951e41ca04db23584f0a108c) )
643723ROM_END
644724
645725ROM_START( finalapro )
r7640r7641
679759
680760   ROM_REGION( 0x200000, "c352", 0 ) // Samples
681761   ROM_LOAD("flr1voi.23s",   0x000000, 0x200000, CRC(ff6077cd) SHA1(73c289125ddeae3e43153e4c570549ca04501262) )
762
763   ROM_REGION( 0x2000, "nvram", 0 ) // default settings, including calibration
764   ROM_LOAD("finalapr.nv",   0x000000, 0x2000, CRC(d51d65fe) SHA1(8a0a523cb6ba2880951e41ca04db23584f0a108c) )
682765ROM_END
683766
684ROM_START( finalapr )
767
768ROM_START( finalaprj )
685769   ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program
686770   ROM_LOAD32_WORD("flr1_mpec.19a", 0x000000, 0x080000, CRC(52735494) SHA1(db9873cb39bcfdd3dbe2e5079249fecac2c46df9) )
687771   ROM_LOAD32_WORD("flr1_mpoc.18a", 0x000002, 0x080000, CRC(b11fe577) SHA1(70b51a1e66a3bb92f027aad7ba0f358c0e139b3c) )
r7640r7641
718802
719803   ROM_REGION( 0x200000, "c352", 0 ) // Samples
720804   ROM_LOAD("flr1voi.23s",   0x000000, 0x200000, CRC(ff6077cd) SHA1(73c289125ddeae3e43153e4c570549ca04501262) )
805
806   ROM_REGION( 0x2000, "nvram", 0 ) // default settings, including calibration
807   ROM_LOAD("finalapr.nv",   0x000000, 0x2000, CRC(d51d65fe) SHA1(8a0a523cb6ba2880951e41ca04db23584f0a108c) )
721808ROM_END
722809
723810static void namcofl_common_init(running_machine *machine)
r7640r7641
740827   namcos2_gametype = NAMCOFL_FINAL_LAP_R;
741828}
742829
743GAME( 1995, speedrcr,         0, namcofl, namcofl, speedrcr, ROT0, "Namco", "Speed Racer", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
744GAME( 1995, finalapr,         0, namcofl, namcofl, finalapr, ROT0, "Namco", "Final Lap R (Japan Rev. C)", GAME_IMPERFECT_SOUND )
745GAME( 1995, finalaprb, finalapr, namcofl, namcofl, finalapr, ROT0, "Namco", "Final Lap R (Rev. B)", GAME_IMPERFECT_SOUND )
746GAME( 1995, finalapro, finalapr, namcofl, namcofl, finalapr, ROT0, "Namco", "Final Lap R", GAME_IMPERFECT_SOUND )
830GAME ( 1995, speedrcr,         0, namcofl, speedrcr, speedrcr, ROT0, "Namco", "Speed Racer", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
831GAMEL( 1995, finalapr,         0, namcofl, finalapr, finalapr, ROT0, "Namco", "Final Lap R (Rev. B)", GAME_IMPERFECT_SOUND, layout_namcofl )
832GAMEL( 1995, finalapro, finalapr, namcofl, finalapr, finalapr, ROT0, "Namco", "Final Lap R", GAME_IMPERFECT_SOUND, layout_namcofl )
833GAMEL( 1995, finalaprj, finalapr, namcofl, finalapr, finalapr, ROT0, "Namco", "Final Lap R (Japan Rev. C)", GAME_IMPERFECT_SOUND, layout_namcofl )
src/mame/drivers/dynax.c
r7640r7641
9696                                Sports Match
9797***************************************************************************/
9898
99UINT8 dynax_blitter_irq;
100static UINT8 dynax_sound_irq;
101static UINT8 dynax_vblank_irq;
10299
103100/* It runs in IM 0, thus needs an opcode on the data bus */
104void sprtmtch_update_irq(running_machine *machine)
101void sprtmtch_update_irq( running_machine *machine )
105102{
106   int irq   =   ((dynax_sound_irq)   ? 0x08 : 0) |
107            ((dynax_vblank_irq)  ? 0x10 : 0) |
108            ((dynax_blitter_irq) ? 0x20 : 0) ;
109   cputag_set_input_line_and_vector(machine, "maincpu", 0, irq ? ASSERT_LINE : CLEAR_LINE, 0xc7 | irq); /* rst $xx */
103   dynax_state *state = (dynax_state *)machine->driver_data;
104   int irq = (state->sound_irq ? 0x08 : 0) | ((state->vblank_irq) ? 0x10 : 0) | ((state->blitter_irq) ? 0x20 : 0) ;
105   cpu_set_input_line_and_vector(state->maincpu, 0, irq ? ASSERT_LINE : CLEAR_LINE, 0xc7 | irq); /* rst $xx */
110106}
111107
112108static WRITE8_HANDLER( dynax_vblank_ack_w )
113109{
114   dynax_vblank_irq = 0;
110   dynax_state *state = (dynax_state *)space->machine->driver_data;
111   state->vblank_irq = 0;
115112   sprtmtch_update_irq(space->machine);
116113}
117114
118115static WRITE8_HANDLER( dynax_blitter_ack_w )
119116{
120   dynax_blitter_irq = 0;
117   dynax_state *state = (dynax_state *)space->machine->driver_data;
118   state->blitter_irq = 0;
121119   sprtmtch_update_irq(space->machine);
122120}
123121
124122static INTERRUPT_GEN( sprtmtch_vblank_interrupt )
125123{
126   dynax_vblank_irq = 1;
124   dynax_state *state = (dynax_state *)device->machine->driver_data;
125   state->vblank_irq = 1;
127126   sprtmtch_update_irq(device->machine);
128127}
129128
130static void sprtmtch_sound_callback(running_device *device, int state)
129static void sprtmtch_sound_callback( running_device *device, int state )
131130{
132   dynax_sound_irq = state;
131   dynax_state *driver_state = (dynax_state *)device->machine->driver_data;
132   driver_state->sound_irq = state;
133133   sprtmtch_update_irq(device->machine);
134134}
135135
r7640r7641
138138                            Jantouki - Main CPU
139139***************************************************************************/
140140
141UINT8 dynax_blitter2_irq;
142
143141/* It runs in IM 0, thus needs an opcode on the data bus */
144142void jantouki_update_irq(running_machine *machine)
145143{
146   int irq   =   ((dynax_blitter_irq)   ? 0x08 : 0) |
147            ((dynax_blitter2_irq)   ? 0x10 : 0) |
148            ((dynax_vblank_irq)      ? 0x20 : 0) ;
149   cputag_set_input_line_and_vector(machine, "maincpu", 0, irq ? ASSERT_LINE : CLEAR_LINE, 0xc7 | irq); /* rst $xx */
144   dynax_state *state = (dynax_state *)machine->driver_data;
145   int irq = ((state->blitter_irq) ? 0x08 : 0) | ((state->blitter2_irq) ? 0x10 : 0) | ((state->vblank_irq) ? 0x20 : 0) ;
146   cpu_set_input_line_and_vector(state->maincpu, 0, irq ? ASSERT_LINE : CLEAR_LINE, 0xc7 | irq); /* rst $xx */
150147}
151148
152149static WRITE8_HANDLER( jantouki_vblank_ack_w )
153150{
154   dynax_vblank_irq = 0;
151   dynax_state *state = (dynax_state *)space->machine->driver_data;
152   state->vblank_irq = 0;
155153   jantouki_update_irq(space->machine);
156154}
157155
158156static WRITE8_HANDLER( jantouki_blitter_ack_w )
159157{
160   dynax_blitter_irq = data;
158   dynax_state *state = (dynax_state *)space->machine->driver_data;
159   state->blitter_irq = data;
161160   jantouki_update_irq(space->machine);
162161}
163162
164163static WRITE8_HANDLER( jantouki_blitter2_ack_w )
165164{
166   dynax_blitter2_irq = data;
165   dynax_state *state = (dynax_state *)space->machine->driver_data;
166   state->blitter2_irq = data;
167167   jantouki_update_irq(space->machine);
168168}
169169
170170static INTERRUPT_GEN( jantouki_vblank_interrupt )
171171{
172   dynax_vblank_irq = 1;
172   dynax_state *state = (dynax_state *)device->machine->driver_data;
173   state->vblank_irq = 1;
173174   jantouki_update_irq(device->machine);
174175}
175176
r7640r7641
178179                            Jantouki - Sound CPU
179180***************************************************************************/
180181
181static UINT8 dynax_soundlatch_irq;
182static UINT8 dynax_sound_vblank_irq;
183
184182static void jantouki_sound_update_irq(running_machine *machine)
185183{
186   int irq   =   ((dynax_sound_irq)         ? 0x08 : 0) |
187            ((dynax_soundlatch_irq)      ? 0x10 : 0) |
188            ((dynax_sound_vblank_irq)   ? 0x20 : 0) ;
189   cputag_set_input_line_and_vector(machine, "soundcpu", 0, irq ? ASSERT_LINE : CLEAR_LINE, 0xc7 | irq); /* rst $xx */
184   dynax_state *state = (dynax_state *)machine->driver_data;
185   int irq = ((state->sound_irq) ? 0x08 : 0) | ((state->soundlatch_irq) ? 0x10 : 0) | ((state->sound_vblank_irq) ? 0x20 : 0) ;
186   cpu_set_input_line_and_vector(state->soundcpu, 0, irq ? ASSERT_LINE : CLEAR_LINE, 0xc7 | irq); /* rst $xx */
190187}
191188
192189static INTERRUPT_GEN( jantouki_sound_vblank_interrupt )
193190{
194   dynax_sound_vblank_irq = 1;
191   dynax_state *state = (dynax_state *)device->machine->driver_data;
192   state->sound_vblank_irq = 1;
195193   jantouki_sound_update_irq(device->machine);
196194}
197195
198196static WRITE8_HANDLER( jantouki_sound_vblank_ack_w )
199197{
200   dynax_sound_vblank_irq = 0;
198   dynax_state *state = (dynax_state *)space->machine->driver_data;
199   state->sound_vblank_irq = 0;
201200   jantouki_sound_update_irq(space->machine);
202201}
203202
204203static void jantouki_sound_callback(running_device *device, int state)
205204{
206   dynax_sound_irq = state;
205   dynax_state *driver_state = (dynax_state *)device->machine->driver_data;
206   driver_state->sound_irq = state;
207207   jantouki_sound_update_irq(device->machine);
208208}
209209
r7640r7641
224224{
225225   coin_counter_w(space->machine, 0, data);
226226}
227
227228static WRITE8_HANDLER( dynax_coincounter_1_w )
228229{
229230   coin_counter_w(space->machine, 1, data);
230231}
231232
232static READ8_HANDLER( ret_ff )   {   return 0xff;   }
233static READ8_HANDLER( ret_ff )
234{
235   return 0xff;
236}
233237
234238
235static int keyb;
236
237239static READ8_HANDLER( hanamai_keyboard_0_r )
238240{
241   dynax_state *state = (dynax_state *)space->machine->driver_data;
239242   int res = 0x3f;
240243
241244   /* the game reads all rows at once (keyb = 0) to check if a key is pressed */
242   if (~keyb & 0x01) res &= input_port_read(space->machine, "KEY0");
243   if (~keyb & 0x02) res &= input_port_read(space->machine, "KEY1");
244   if (~keyb & 0x04) res &= input_port_read(space->machine, "KEY2");
245   if (~keyb & 0x08) res &= input_port_read(space->machine, "KEY3");
246   if (~keyb & 0x10) res &= input_port_read(space->machine, "KEY4");
245   if (!BIT(state->keyb, 0)) res &= input_port_read(space->machine, "KEY0");
246   if (!BIT(state->keyb, 1)) res &= input_port_read(space->machine, "KEY1");
247   if (!BIT(state->keyb, 2)) res &= input_port_read(space->machine, "KEY2");
248   if (!BIT(state->keyb, 3)) res &= input_port_read(space->machine, "KEY3");
249   if (!BIT(state->keyb, 4)) res &= input_port_read(space->machine, "KEY4");
247250
248251   return res;
249252}
250253
251254static READ8_HANDLER( hanamai_keyboard_1_r )
252255{
256   dynax_state *state = (dynax_state *)space->machine->driver_data;
253257   int res = 0x3f;
254258
255259   /* the game reads all rows at once (keyb = 0) to check if a key is pressed */
256   if (~keyb & 0x01) res &= input_port_read(space->machine, "KEY5");
257   if (~keyb & 0x02) res &= input_port_read(space->machine, "KEY6");
258   if (~keyb & 0x04) res &= input_port_read(space->machine, "KEY7");
259   if (~keyb & 0x08) res &= input_port_read(space->machine, "KEY8");
260   if (~keyb & 0x10) res &= input_port_read(space->machine, "KEY9");
260   if (!BIT(state->keyb, 0)) res &= input_port_read(space->machine, "KEY5");
261   if (!BIT(state->keyb, 1)) res &= input_port_read(space->machine, "KEY6");
262   if (!BIT(state->keyb, 2)) res &= input_port_read(space->machine, "KEY7");
263   if (!BIT(state->keyb, 3)) res &= input_port_read(space->machine, "KEY8");
264   if (!BIT(state->keyb, 4)) res &= input_port_read(space->machine, "KEY9");
261265
262266   return res;
263267}
264268
265269static WRITE8_HANDLER( hanamai_keyboard_w )
266270{
267   keyb = data;
271   dynax_state *state = (dynax_state *)space->machine->driver_data;
272   state->keyb = data;
268273}
269274
270275
271276static WRITE8_HANDLER( dynax_rombank_w )
272277{
273   UINT8 *ROM = memory_region(space->machine, "maincpu");
274   memory_set_bankptr(space->machine, "bank1",&ROM[0x08000+0x8000*(data & 0x0f)]);
278   memory_set_bank(space->machine, "bank1", data & 0x0f);
275279}
276280
277281static WRITE8_HANDLER( jantouki_sound_rombank_w )
278282{
279   UINT8 *ROM = memory_region(space->machine, "soundcpu");
280   memory_set_bankptr(space->machine, "bank2",&ROM[0x08000+0x8000*data]);
283   memory_set_bank(space->machine, "bank2", data);
281284}
282285
283286
284static int hnoridur_bank;
285
286287static WRITE8_HANDLER( hnoridur_rombank_w )
287288{
288   UINT8 *ROM = memory_region(space->machine, "maincpu") + 0x10000 + 0x8000*data;
289//logerror("%04x: rom bank = %02x\n",cpu_get_pc(space->cpu),data);
290   memory_set_bankptr(space->machine, "bank1",ROM);
291   hnoridur_bank = data;
289   dynax_state *state = (dynax_state *)space->machine->driver_data;
290   int bank_n = (memory_region_length(space->machine, "maincpu") - 0x10000) / 0x8000;
291
292   //logerror("%04x: rom bank = %02x\n", cpu_get_pc(space->cpu), data);
293   if (data < bank_n)
294      memory_set_bank(space->machine, "bank1", data);
295   else
296      logerror("rom_bank = %02x (larger than the maximum bank %02x)\n", data, bank_n);
297   state->hnoridur_bank = data;
292298}
293299
294static UINT8 palette_ram[16*256*2];
295static int palbank;
296300
297301static WRITE8_HANDLER( hnoridur_palbank_w )
298302{
299   palbank = data & 0x0f;
300   dynax_blit_palbank_w(space,0,data);
303   dynax_state *state = (dynax_state *)space->machine->driver_data;
304   state->palbank = data & 0x0f;
305   dynax_blit_palbank_w(space, 0, data);
301306}
302307
303308static WRITE8_HANDLER( hnoridur_palette_w )
304309{
305   switch (hnoridur_bank)
310   dynax_state *state = (dynax_state *)space->machine->driver_data;
311
312   switch (state->hnoridur_bank)
306313   {
307314      case 0x10:
308         if (offset >= 0x100) return;
309         palette_ram[256*palbank + offset + 16*256] = data;
315         if (offset >= 0x100)
316            return;
317         state->palette_ram[256 * state->palbank + offset + 16 * 256] = data;
310318         break;
311319
312320      case 0x14:
313         if (offset >= 0x100) return;
314         palette_ram[256*palbank + offset] = data;
321         if (offset >= 0x100)
322            return;
323         state->palette_ram[256 * state->palbank + offset] = data;
315324         break;
316325
317326      // hnoridur: R/W RAM
318327      case 0x18:
319328      {
320         UINT8 *RAM = memory_region(space->machine, "maincpu") + 0x10000 + hnoridur_bank * 0x8000;
329         UINT8 *RAM = memory_region(space->machine, "maincpu") + 0x10000 + state->hnoridur_bank * 0x8000;
321330         RAM[offset] = data;
322331         return;
323332      }
324333
325334      default:
326         popmessage("palette_w with bank = %02x",hnoridur_bank);
335         popmessage("palette_w with bank = %02x", state->hnoridur_bank);
327336         break;
328337   }
329338
330339   {
331      int x =   (palette_ram[256*palbank + offset]<<8) + palette_ram[256*palbank + offset + 16*256];
340      int x = (state->palette_ram[256 * state->palbank + offset] << 8) + state->palette_ram[256 * state->palbank + offset + 16 * 256];
332341      /* The bits are in reverse order! */
333      int r = BITSWAP8((x >>  0) & 0x1f, 7,6,5, 0,1,2,3,4 );
334      int g = BITSWAP8((x >>  5) & 0x1f, 7,6,5, 0,1,2,3,4 );
335      int b = BITSWAP8((x >> 10) & 0x1f, 7,6,5, 0,1,2,3,4 );
336      palette_set_color_rgb(space->machine,256*palbank + offset,pal5bit(r),pal5bit(g),pal5bit(b));
342      int r = BITSWAP8((x >>  0) & 0x1f, 7, 6, 5, 0, 1, 2, 3, 4);
343      int g = BITSWAP8((x >>  5) & 0x1f, 7, 6, 5, 0, 1, 2, 3, 4);
344      int b = BITSWAP8((x >> 10) & 0x1f, 7, 6, 5, 0, 1, 2, 3, 4);
345      palette_set_color_rgb(space->machine, 256 * state->palbank + offset, pal5bit(r), pal5bit(g), pal5bit(b));
337346   }
338347}
339348
340349static WRITE8_HANDLER( yarunara_palette_w )
341350{
342   int addr = 512*palbank + offset;
343   switch (hnoridur_bank)
351   dynax_state *state = (dynax_state *)space->machine->driver_data;
352   int addr = 512 * state->palbank + offset;
353
354   switch (state->hnoridur_bank)
344355   {
345356      case 0x10:
346         palette_ram[addr] = data;
357         state->palette_ram[addr] = data;
347358         break;
348359
349360      case 0x1c:   // RTC
350361      {
351         running_device *rtc = devtag_get_device(space->machine, "rtc");
352         msm6242_w(rtc, offset, data);
362         msm6242_w(state->rtc, offset, data);
353363      }
354364      return;
355365
356366      default:
357         popmessage("palette_w with bank = %02x",hnoridur_bank);
367         popmessage("palette_w with bank = %02x", state->hnoridur_bank);
358368         return;
359369   }
360370
361371   {
362      int br = palette_ram[addr & ~0x10];      // bbbrrrrr
363      int bg = palette_ram[addr | 0x10];      // bb0ggggg
372      int br = state->palette_ram[addr & ~0x10];      // bbbrrrrr
373      int bg = state->palette_ram[addr | 0x10];      // bb0ggggg
364374      int r = br & 0x1f;
365375      int g = bg & 0x1f;
366      int b = ((bg & 0xc0)>>3) | ((br & 0xe0)>>5);
367      palette_set_color_rgb(space->machine, 256*palbank + ((offset&0xf)|((offset&0x1e0)>>1)) ,pal5bit(r),pal5bit(g),pal5bit(b));
376      int b = ((bg & 0xc0) >> 3) | ((br & 0xe0) >> 5);
377      palette_set_color_rgb(space->machine, 256 * state->palbank + ((offset & 0x0f) | ((offset & 0x1e0) >> 1)), pal5bit(r), pal5bit(g), pal5bit(b));
368378   }
369379}
370380
371381static WRITE8_HANDLER( nanajign_palette_w )
372382{
373   switch (hnoridur_bank)
383   dynax_state *state = (dynax_state *)space->machine->driver_data;
384
385   switch (state->hnoridur_bank)
374386   {
375387      case 0x10:
376         palette_ram[256*palbank + offset + 16*256] = data;
388         state->palette_ram[256 * state->palbank + offset + 16 * 256] = data;
377389         break;
378390
379391      case 0x14:
380         palette_ram[256*palbank + offset] = data;
392         state->palette_ram[256 * state->palbank + offset] = data;
381393         break;
382394
383395      default:
384         popmessage("palette_w with bank = %02x",hnoridur_bank);
396         popmessage("palette_w with bank = %02x", state->hnoridur_bank);
385397         break;
386398   }
387399
388400   {
389      int bg = palette_ram[256*palbank + offset];
390      int br = palette_ram[256*palbank + offset + 16*256];
401      int bg = state->palette_ram[256 * state->palbank + offset];
402      int br = state->palette_ram[256 * state->palbank + offset + 16 * 256];
391403      int r = br & 0x1f;
392404      int g = bg & 0x1f;
393      int b = ((bg & 0xc0)>>3) | ((br & 0xe0)>>5);
394      palette_set_color_rgb(space->machine,256*palbank + offset,pal5bit(r),pal5bit(g),pal5bit(b));
405      int b = ((bg & 0xc0) >> 3) | ((br & 0xe0) >> 5);
406      palette_set_color_rgb(space->machine, 256 * state->palbank + offset, pal5bit(r), pal5bit(g), pal5bit(b));
395407   }
396408}
397409
398static int msm5205next;
399static int resetkludge;
400410
401static void adpcm_int(running_device *device)
411static void adpcm_int( running_device *device )
402412{
403   static int toggle;
413   dynax_state *state = (dynax_state *)device->machine->driver_data;
414   msm5205_data_w(device, state->msm5205next >> 4);
415   state->msm5205next <<= 4;
404416
405   msm5205_data_w(device,msm5205next >> 4);
406   msm5205next<<=4;
417   state->toggle = 1 - state->toggle;
407418
408   toggle = 1 - toggle;
409   if (toggle)
419   if (state->toggle)
410420   {
411      if (resetkludge)   // don't know what's wrong, but NMIs when the 5205 is reset make the game crash
412      cputag_set_input_line(device->machine, "maincpu", INPUT_LINE_NMI, PULSE_LINE);
421      if (state->resetkludge)   // don't know what's wrong, but NMIs when the 5205 is reset make the game crash
422      cpu_set_input_line(state->maincpu, INPUT_LINE_NMI, PULSE_LINE);
413423   }
414424}
415static void adpcm_int_cpu1(running_device *device)
425
426static void adpcm_int_cpu1( running_device *device )
416427{
417   static int toggle;
428   dynax_state *state = (dynax_state *)device->machine->driver_data;
429   msm5205_data_w(device, state->msm5205next >> 4);
430   state->msm5205next <<= 4;
418431
419   msm5205_data_w(device,msm5205next >> 4);
420   msm5205next<<=4;
421
422   toggle = 1 - toggle;
423   if (toggle)
432   state->toggle_cpu1 = 1 - state->toggle_cpu1;
433   if (state->toggle_cpu1)
424434   {
425      if (resetkludge)   // don't know what's wrong, but NMIs when the 5205 is reset make the game crash
426      cputag_set_input_line(device->machine, "soundcpu", INPUT_LINE_NMI, PULSE_LINE);   // cpu1
435      if (state->resetkludge)   // don't know what's wrong, but NMIs when the 5205 is reset make the game crash
436      cpu_set_input_line(state->soundcpu, INPUT_LINE_NMI, PULSE_LINE);   // cpu1
427437   }
428438}
429439
430440
431441static WRITE8_HANDLER( adpcm_data_w )
432442{
433   msm5205next = data;
443   dynax_state *state = (dynax_state *)space->machine->driver_data;
444   state->msm5205next = data;
434445}
435446
436447static WRITE8_DEVICE_HANDLER( adpcm_reset_w )
437448{
438   resetkludge = data & 1;
439   msm5205_reset_w(device,~data & 1);
449   dynax_state *state = (dynax_state *)device->machine->driver_data;
450   state->resetkludge = data & 1;
451   msm5205_reset_w(device, ~data & 1);
440452}
441453
442454static MACHINE_RESET( adpcm )
443455{
456   dynax_state *state = (dynax_state *)machine->driver_data;
444457   /* start with the MSM5205 reset */
445   resetkludge = 0;
446   msm5205_reset_w(devtag_get_device(machine, "msm"),1);
458   state->resetkludge = 0;
459   msm5205_reset_w(devtag_get_device(machine, "msm"), 1);
447460}
448461
449462static WRITE8_HANDLER( yarunara_layer_half_w )
450463{
451   hanamai_layer_half_w(space,0,data >> 1);
464   hanamai_layer_half_w(space, 0, data >> 1);
452465}
466
453467static WRITE8_HANDLER( yarunara_layer_half2_w )
454468{
455   hnoridur_layer_half2_w(space,0,data >> 1);
469   hnoridur_layer_half2_w(space, 0, data >> 1);
456470}
457471
458472static ADDRESS_MAP_START( sprtmtch_mem_map, ADDRESS_SPACE_PROGRAM, 8 )
r7640r7641
478492   AM_RANGE( 0x0000, 0x5fff ) AM_ROM
479493   AM_RANGE( 0x6000, 0x6fff ) AM_RAM
480494   AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
481   AM_RANGE( 0x8000, 0x80ff ) AM_WRITE(nanajign_palette_w   )
495   AM_RANGE( 0x8000, 0x80ff ) AM_WRITE(nanajign_palette_w)
482496   AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK("bank1")
483497ADDRESS_MAP_END
484498
r7640r7641
494508   AM_RANGE( 0x6000, 0x6fff ) AM_RAM
495509   AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
496510   AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK("bank1")
497   AM_RANGE( 0x8000, 0x81ff ) AM_WRITE(yarunara_palette_w   )   // Palette or RTC
511   AM_RANGE( 0x8000, 0x81ff ) AM_WRITE(yarunara_palette_w)   // Palette or RTC
498512ADDRESS_MAP_END
499513
500514static ADDRESS_MAP_START( jantouki_mem_map, ADDRESS_SPACE_PROGRAM, 8 )
r7640r7641
514528
515529static ADDRESS_MAP_START( hanamai_io_map, ADDRESS_SPACE_IO, 8 )
516530   ADDRESS_MAP_GLOBAL_MASK(0xff)
517   AM_RANGE( 0x00, 0x00 ) AM_WRITE      ( dynax_extra_scrollx_w      )   // screen scroll X
518   AM_RANGE( 0x20, 0x20 ) AM_WRITE      ( dynax_extra_scrolly_w      )   // screen scroll Y
519   AM_RANGE( 0x41, 0x47 ) AM_WRITE      ( dynax_blitter_rev2_w      )   // Blitter
520   AM_RANGE( 0x50, 0x50 ) AM_WRITE      ( dynax_rombank_w         )   // BANK ROM Select  hnkochou only
521   AM_RANGE( 0x60, 0x60 ) AM_READ      ( hanamai_keyboard_0_r      )   // P1
522   AM_RANGE( 0x61, 0x61 ) AM_READ      ( hanamai_keyboard_1_r      )   // P2
523   AM_RANGE( 0x62, 0x62 ) AM_READ_PORT   ( "COINS"               )   // Coins
524   AM_RANGE( 0x63, 0x63 ) AM_READ      ( ret_ff               )   // ?
525   AM_RANGE( 0x64, 0x64 ) AM_WRITE      ( hanamai_keyboard_w      )   // keyboard row select
526   AM_RANGE( 0x65, 0x65 ) AM_WRITE      ( dynax_rombank_w         )   // BANK ROM Select  hanamai only
527   AM_RANGE( 0x66, 0x66 ) AM_WRITE      ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
528   AM_RANGE( 0x67, 0x67 ) AM_WRITE      ( adpcm_data_w            )   // MSM5205 data
529   AM_RANGE( 0x68, 0x68 ) AM_WRITE      ( dynax_layer_enable_w      )   // Layers Enable
530   AM_RANGE( 0x69, 0x69 ) AM_WRITE      ( hanamai_priority_w      )   // layer priority
531   AM_RANGE( 0x6a, 0x6a ) AM_WRITE      ( dynax_blit_dest_w         )   // Destination Layer
532   AM_RANGE( 0x6b, 0x6b ) AM_WRITE      ( dynax_blit_pen_w         )   // Destination Pen
533   AM_RANGE( 0x6c, 0x6c ) AM_WRITE      ( dynax_blit_palette01_w   )   // Layers Palettes (Low Bits)
534   AM_RANGE( 0x6d, 0x6d ) AM_WRITE      ( dynax_blit_palette23_w   )   //
535   AM_RANGE( 0x6e, 0x6e ) AM_WRITE      ( dynax_blit_backpen_w      )   // Background Color
536   AM_RANGE( 0x70, 0x70 ) AM_DEVWRITE   ( "msm", adpcm_reset_w)   // MSM5205 reset
537   AM_RANGE( 0x71, 0x71 ) AM_WRITE      ( dynax_flipscreen_w      )   // Flip Screen
538   AM_RANGE( 0x72, 0x72 ) AM_WRITE      ( dynax_coincounter_0_w      )   // Coin Counters
539   AM_RANGE( 0x73, 0x73 ) AM_WRITE      ( dynax_coincounter_1_w      )   //
540   AM_RANGE( 0x74, 0x74 ) AM_WRITE      ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
541   AM_RANGE( 0x76, 0x76 ) AM_WRITE      ( dynax_blit_palbank_w      )   // Layers Palettes (High Bit)
542   AM_RANGE( 0x77, 0x77 ) AM_WRITE      ( hanamai_layer_half_w      )   // half of the interleaved layer to write to
543   AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w   )   // 2 x DSW
544   AM_RANGE( 0x7a, 0x7b ) AM_DEVWRITE   ( "aysnd", ay8910_address_data_w   )   // AY8910
531   AM_RANGE( 0x00, 0x00 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
532   AM_RANGE( 0x20, 0x20 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
533   AM_RANGE( 0x41, 0x47 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
534   AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_rombank_w)      // BANK ROM Select  hnkochou only
535   AM_RANGE( 0x60, 0x60 ) AM_READ(hanamai_keyboard_0_r)      // P1
536   AM_RANGE( 0x61, 0x61 ) AM_READ(hanamai_keyboard_1_r)      // P2
537   AM_RANGE( 0x62, 0x62 ) AM_READ_PORT("COINS")         // Coins
538   AM_RANGE( 0x63, 0x63 ) AM_READ(ret_ff)            // ?
539   AM_RANGE( 0x64, 0x64 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
540   AM_RANGE( 0x65, 0x65 ) AM_WRITE(dynax_rombank_w)      // BANK ROM Select  hanamai only
541   AM_RANGE( 0x66, 0x66 ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
542   AM_RANGE( 0x67, 0x67 ) AM_WRITE(adpcm_data_w)         // MSM5205 data
543   AM_RANGE( 0x68, 0x68 ) AM_WRITE(dynax_layer_enable_w)      // Layers Enable
544   AM_RANGE( 0x69, 0x69 ) AM_WRITE(hanamai_priority_w)      // layer priority
545   AM_RANGE( 0x6a, 0x6a ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
546   AM_RANGE( 0x6b, 0x6b ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
547   AM_RANGE( 0x6c, 0x6c ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes (Low Bits)
548   AM_RANGE( 0x6d, 0x6d ) AM_WRITE(dynax_blit_palette23_w)   //
549   AM_RANGE( 0x6e, 0x6e ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
550   AM_RANGE( 0x70, 0x70 ) AM_DEVWRITE("msm", adpcm_reset_w)   // MSM5205 reset
551   AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
552   AM_RANGE( 0x72, 0x72 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counters
553   AM_RANGE( 0x73, 0x73 ) AM_WRITE(dynax_coincounter_1_w)   //
554   AM_RANGE( 0x74, 0x74 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
555   AM_RANGE( 0x76, 0x76 ) AM_WRITE(dynax_blit_palbank_w)      // Layers Palettes (High Bit)
556   AM_RANGE( 0x77, 0x77 ) AM_WRITE(hanamai_layer_half_w)      // half of the interleaved layer to write to
557   AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)   // 2 x DSW
558   AM_RANGE( 0x7a, 0x7b ) AM_DEVWRITE("aysnd", ay8910_address_data_w)   // AY8910
545559//  AM_RANGE( 0x7c, 0x7c ) AM_WRITENOP   // CRT Controller
546560//  AM_RANGE( 0x7d, 0x7d ) AM_WRITENOP   //
547   AM_RANGE( 0x7e, 0x7e ) AM_WRITE      ( dynax_blit_romregion_w   )   // Blitter ROM bank
561   AM_RANGE( 0x7e, 0x7e ) AM_WRITE(dynax_blit_romregion_w)   // Blitter ROM bank
548562ADDRESS_MAP_END
549563
550564
551565static ADDRESS_MAP_START( hnoridur_io_map, ADDRESS_SPACE_IO, 8 )
552566   ADDRESS_MAP_GLOBAL_MASK(0xff)
553   AM_RANGE( 0x01, 0x07 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
567   AM_RANGE( 0x01, 0x07 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
554568//  AM_RANGE( 0x10, 0x10 ) AM_WRITENOP   // CRT Controller
555569//  AM_RANGE( 0x11, 0x11 ) AM_WRITENOP   // CRT Controller
556   AM_RANGE( 0x20, 0x20 ) AM_WRITE   ( hanamai_keyboard_w      )   // keyboard row select
557   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT   ( "COINS"            )   // Coins
558   AM_RANGE( 0x22, 0x22 ) AM_READ   ( hanamai_keyboard_1_r      )   // P2
559   AM_RANGE( 0x23, 0x23 ) AM_READ   ( hanamai_keyboard_0_r      )   // P1
560   AM_RANGE( 0x24, 0x24 ) AM_READ_PORT   ( "DSW1"            )   // DSW2
561   AM_RANGE( 0x25, 0x25 ) AM_READ_PORT   ( "DSW3"            )   // DSW4
562   AM_RANGE( 0x26, 0x26 ) AM_READ_PORT   ( "DSW2"            )   // DSW3
563   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE   ( "msm", adpcm_reset_w   )   // MSM5205 reset
564   AM_RANGE( 0x32, 0x32 ) AM_WRITE   ( adpcm_data_w            )   // MSM5205 data
565   AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE( "ymsnd", ym2413_w   )   //
566   AM_RANGE( 0x36, 0x36 ) AM_DEVREAD   ( "aysnd", ay8910_r         )   // AY8910, DSW1
567   AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE   ( "aysnd", ay8910_data_w   )   // AY8910
568   AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE   ( "aysnd", ay8910_address_w   )   //
569   AM_RANGE( 0x40, 0x40 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
570   AM_RANGE( 0x41, 0x41 ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
571   AM_RANGE( 0x42, 0x42 ) AM_WRITE   ( dynax_blit_palette01_w   )   // Layers Palettes
572   AM_RANGE( 0x43, 0x43 ) AM_WRITE   ( dynax_blit_palette23_w   )   //
573   AM_RANGE( 0x44, 0x44 ) AM_WRITE   ( hanamai_priority_w      )   // layer priority and enable
574   AM_RANGE( 0x45, 0x45 ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
575   AM_RANGE( 0x46, 0x46 ) AM_WRITE   ( dynax_blit_romregion_w   )   // Blitter ROM bank
576   AM_RANGE( 0x47, 0x47 ) AM_WRITE   ( hnoridur_palbank_w      )
577   AM_RANGE( 0x50, 0x50 ) AM_WRITE   ( dynax_extra_scrollx_w      )   // screen scroll X
578   AM_RANGE( 0x51, 0x51 ) AM_WRITE   ( dynax_extra_scrolly_w      )   // screen scroll Y
579   AM_RANGE( 0x54, 0x54 ) AM_WRITE   ( hnoridur_rombank_w      )   // BANK ROM Select
580   AM_RANGE( 0x55, 0x55 ) AM_WRITENOP   // ? VBlank IRQ Ack
581   AM_RANGE( 0x56, 0x56 ) AM_WRITE   ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
582   AM_RANGE( 0x57, 0x57 ) AM_READ   ( ret_ff               )   // ?
583   AM_RANGE( 0x60, 0x60 ) AM_WRITE   ( dynax_flipscreen_w      )   // Flip Screen
584   AM_RANGE( 0x61, 0x61 ) AM_WRITE   ( hanamai_layer_half_w      )   // half of the interleaved layer to write to
585   AM_RANGE( 0x62, 0x62 ) AM_WRITE   ( hnoridur_layer_half2_w   )   //
586   AM_RANGE( 0x67, 0x67 ) AM_WRITE   ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
587   AM_RANGE( 0x70, 0x70 ) AM_WRITE   ( dynax_coincounter_0_w      )   // Coin Counters
588   AM_RANGE( 0x71, 0x71 ) AM_WRITE   ( dynax_coincounter_1_w      )   //
570   AM_RANGE( 0x20, 0x20 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
571   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT("COINS")         // Coins
572   AM_RANGE( 0x22, 0x22 ) AM_READ(hanamai_keyboard_1_r)      // P2
573   AM_RANGE( 0x23, 0x23 ) AM_READ(hanamai_keyboard_0_r)      // P1
574   AM_RANGE( 0x24, 0x24 ) AM_READ_PORT("DSW1")         // DSW2
575   AM_RANGE( 0x25, 0x25 ) AM_READ_PORT("DSW3")         // DSW4
576   AM_RANGE( 0x26, 0x26 ) AM_READ_PORT("DSW2")         // DSW3
577   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE("msm", adpcm_reset_w)   // MSM5205 reset
578   AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w)         // MSM5205 data
579   AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
580   AM_RANGE( 0x36, 0x36 ) AM_DEVREAD("aysnd", ay8910_r)      // AY8910, DSW1
581   AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_data_w)   // AY8910
582   AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE("aysnd", ay8910_address_w)   //
583   AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
584   AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
585   AM_RANGE( 0x42, 0x42 ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes
586   AM_RANGE( 0x43, 0x43 ) AM_WRITE(dynax_blit_palette23_w)   //
587   AM_RANGE( 0x44, 0x44 ) AM_WRITE(hanamai_priority_w)      // layer priority and enable
588   AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
589   AM_RANGE( 0x46, 0x46 ) AM_WRITE(dynax_blit_romregion_w)   // Blitter ROM bank
590   AM_RANGE( 0x47, 0x47 ) AM_WRITE(hnoridur_palbank_w)
591   AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
592   AM_RANGE( 0x51, 0x51 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
593   AM_RANGE( 0x54, 0x54 ) AM_WRITE(hnoridur_rombank_w)      // BANK ROM Select
594   AM_RANGE( 0x55, 0x55 ) AM_WRITENOP               // ? VBlank IRQ Ack
595   AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
596   AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff)            // ?
597   AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
598   AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w)      // half of the interleaved layer to write to
599   AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w)   //
600   AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
601   AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counters
602   AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w)   //
589603ADDRESS_MAP_END
590604
591605/***************************************************************************
r7640r7641
594608
595609static WRITE8_HANDLER( hjingi_bank_w )
596610{
597   hnoridur_bank = data;
611   dynax_state *state = (dynax_state *)space->machine->driver_data;
612   state->hnoridur_bank = data;
598613}
599614
600615static WRITE8_HANDLER( hjingi_lockout_w )
r7640r7641
602617   coin_lockout_w(space->machine, 0, (~data) & 0x01);
603618}
604619
605static UINT8 hjingi_hopper;
606620static WRITE8_HANDLER( hjingi_hopper_w )
607621{
608   hjingi_hopper = data & 0x01;
622   dynax_state *state = (dynax_state *)space->machine->driver_data;
623   state->hopper = data & 0x01;
609624}
610625
611static UINT8 hjingi_hopper_bit(running_machine *machine)
626static UINT8 hjingi_hopper_bit( running_machine *machine )
612627{
613   return (hjingi_hopper && !(video_screen_get_frame_number(machine->primary_screen)%10)) ? 0 : (1<<6);
628   dynax_state *state = (dynax_state *)machine->driver_data;
629   return (state->hopper && !(video_screen_get_frame_number(machine->primary_screen) % 10)) ? 0 : (1 << 6);
614630}
615631
616632static READ8_HANDLER( hjingi_keyboard_0_r )
617633{
618   return hanamai_keyboard_0_r(space,0) | hjingi_hopper_bit(space->machine);
634   return hanamai_keyboard_0_r(space, 0) | hjingi_hopper_bit(space->machine);
619635}
636
620637static READ8_HANDLER( hjingi_keyboard_1_r )
621638{
622   return hanamai_keyboard_1_r(space,0) | input_port_read(space->machine, "BET");
639   return hanamai_keyboard_1_r(space, 0) | input_port_read(space->machine, "BET");
623640}
624641
625642static ADDRESS_MAP_START( hjingi_mem_map, ADDRESS_SPACE_PROGRAM, 8 )
r7640r7641
630647ADDRESS_MAP_END
631648
632649static ADDRESS_MAP_START( hjingi_io_map, ADDRESS_SPACE_IO, 8 )   ADDRESS_MAP_GLOBAL_MASK(0xff)
633   AM_RANGE( 0x01, 0x07 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
650   AM_RANGE( 0x01, 0x07 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
634651
635652//  AM_RANGE( 0x10, 0x10 ) AM_WRITENOP   // CRT Controller
636653//  AM_RANGE( 0x11, 0x11 ) AM_WRITENOP   // CRT Controller
637654
638   AM_RANGE( 0x20, 0x20 ) AM_WRITE   ( hanamai_keyboard_w      )   // keyboard row select
639   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT   ( "COINS"            )   // Coins
640   AM_RANGE( 0x22, 0x22 ) AM_READ   ( hjingi_keyboard_1_r      )   // P2 + Hopper
641   AM_RANGE( 0x23, 0x23 ) AM_READ   ( hjingi_keyboard_0_r      )   // P1 + Hopper
642   AM_RANGE( 0x24, 0x24 ) AM_READ_PORT   ( "DSW1"            )   // DSW1
643   AM_RANGE( 0x25, 0x25 ) AM_READ_PORT   ( "DSW3"            )   // DSW3
644   AM_RANGE( 0x26, 0x26 ) AM_READ_PORT   ( "DSW2"            )   // DSW2
655   AM_RANGE( 0x20, 0x20 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
656   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT("COINS")         // Coins
657   AM_RANGE( 0x22, 0x22 ) AM_READ(hjingi_keyboard_1_r)      // P2 + Hopper
658   AM_RANGE( 0x23, 0x23 ) AM_READ(hjingi_keyboard_0_r)      // P1 + Hopper
659   AM_RANGE( 0x24, 0x24 ) AM_READ_PORT("DSW1")         // DSW1
660   AM_RANGE( 0x25, 0x25 ) AM_READ_PORT("DSW3")         // DSW3
661   AM_RANGE( 0x26, 0x26 ) AM_READ_PORT("DSW2")         // DSW2
645662
646   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE   ( "msm", adpcm_reset_w   )   // MSM5205 reset
647   AM_RANGE( 0x32, 0x32 ) AM_WRITE   ( adpcm_data_w            )   // MSM5205 data
648   AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE( "ymsnd", ym2413_w         )   //
663   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE("msm", adpcm_reset_w)   // MSM5205 reset
664   AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w)         // MSM5205 data
665   AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
649666
650   AM_RANGE( 0x36, 0x36 ) AM_DEVREAD   ( "aysnd", ay8910_r      )   // AY8910, DSW1
651   AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE   ( "aysnd", ay8910_data_w   )   // AY8910
652   AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE   ( "aysnd", ay8910_address_w)   //
667   AM_RANGE( 0x36, 0x36 ) AM_DEVREAD("aysnd", ay8910_r)      // AY8910, DSW1
668   AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_data_w)   // AY8910
669   AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE("aysnd", ay8910_address_w)   //
653670
654   AM_RANGE( 0x40, 0x40 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
655   AM_RANGE( 0x41, 0x41 ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
656   AM_RANGE( 0x42, 0x42 ) AM_WRITE   ( dynax_blit_palette01_w   )   // Layers Palettes
657   AM_RANGE( 0x43, 0x43 ) AM_WRITE   ( dynax_blit_palette23_w   )   //
658   AM_RANGE( 0x44, 0x44 ) AM_WRITE   ( hanamai_priority_w      )   // layer priority and enable
659   AM_RANGE( 0x45, 0x45 ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
660   AM_RANGE( 0x46, 0x46 ) AM_WRITE   ( dynax_blit_romregion_w   )   // Blitter ROM bank
661   AM_RANGE( 0x47, 0x47 ) AM_WRITE   ( hnoridur_palbank_w      )
671   AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
672   AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
673   AM_RANGE( 0x42, 0x42 ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes
674   AM_RANGE( 0x43, 0x43 ) AM_WRITE(dynax_blit_palette23_w)   //
675   AM_RANGE( 0x44, 0x44 ) AM_WRITE(hanamai_priority_w)      // layer priority and enable
676   AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
677   AM_RANGE( 0x46, 0x46 ) AM_WRITE(dynax_blit_romregion_w)   // Blitter ROM bank
678   AM_RANGE( 0x47, 0x47 ) AM_WRITE(hnoridur_palbank_w)
662679
663   AM_RANGE( 0x50, 0x50 ) AM_WRITE   ( dynax_extra_scrollx_w      )   // screen scroll X
664   AM_RANGE( 0x51, 0x51 ) AM_WRITE   ( dynax_extra_scrolly_w      )   // screen scroll Y
680   AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
681   AM_RANGE( 0x51, 0x51 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
665682
666   AM_RANGE( 0x54, 0x54 ) AM_WRITE   ( hjingi_bank_w            )   //
683   AM_RANGE( 0x54, 0x54 ) AM_WRITE(hjingi_bank_w)         //
667684
668   AM_RANGE( 0x56, 0x56 ) AM_WRITE   ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
669   AM_RANGE( 0x57, 0x57 ) AM_READ   ( ret_ff               )   // Blitter Busy
670   AM_RANGE( 0x67, 0x67 ) AM_WRITE   ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
685   AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
686   AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff)            // Blitter Busy
687   AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
671688
672   AM_RANGE( 0x60, 0x60 ) AM_WRITE   ( dynax_flipscreen_w      )   // Flip Screen
673   AM_RANGE( 0x61, 0x61 ) AM_WRITE   ( hanamai_layer_half_w      )   // half of the interleaved layer to write to
674   AM_RANGE( 0x62, 0x62 ) AM_WRITE   ( hnoridur_layer_half2_w   )   //
689   AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
690   AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w)      // half of the interleaved layer to write to
691   AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w)   //
675692
676   AM_RANGE( 0x70, 0x70 ) AM_WRITE   ( dynax_coincounter_0_w      )   // Coin Counters
677   AM_RANGE( 0x71, 0x71 ) AM_WRITE   ( dynax_coincounter_1_w      )   //
678   AM_RANGE( 0x72, 0x72 ) AM_WRITE   ( hjingi_hopper_w         )   // Hopper
679   AM_RANGE( 0x73, 0x73 ) AM_WRITE   ( hjingi_lockout_w         )   // Coin Lockout
693   AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counters
694   AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w)   //
695   AM_RANGE( 0x72, 0x72 ) AM_WRITE(hjingi_hopper_w)      // Hopper
696   AM_RANGE( 0x73, 0x73 ) AM_WRITE(hjingi_lockout_w)      // Coin Lockout
680697
681   AM_RANGE( 0x80, 0x80 ) AM_WRITE   ( hnoridur_rombank_w      )   // BANK ROM Select
698   AM_RANGE( 0x80, 0x80 ) AM_WRITE(hnoridur_rombank_w)      // BANK ROM Select
682699ADDRESS_MAP_END
683700
684701
r7640r7641
686703                    Yarunara / Quiz TV Q&Q / Mahjong Angels
687704***************************************************************************/
688705
689static UINT8 yarunara_select, yarunara_ip;
690706static WRITE8_HANDLER( yarunara_input_w )
691707{
708   dynax_state *state = (dynax_state *)space->machine->driver_data;
709
692710   switch (offset)
693711   {
694      case 0:   yarunara_select = data;
695            yarunara_ip = 0;
712      case 0:   state->input_sel = data;
713            state->keyb = 0;
696714            break;
697715
698716      case 1:   break;
r7640r7641
702720
703721static READ8_HANDLER( yarunara_input_r )
704722{
723   dynax_state *state = (dynax_state *)space->machine->driver_data;
705724   static const char *const keynames0[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4" };
706725   static const char *const keynames1[] = { "KEY5", "KEY6", "KEY7", "KEY8", "KEY9" };
707726
r7640r7641
709728   {
710729      case 0:
711730      {
712         switch( yarunara_select )
731         switch (state->input_sel)
713732         {
714            case 0x00:
715               return input_port_read(space->machine, "COINS");   // coins
733         case 0x00:
734            return input_port_read(space->machine, "COINS");   // coins
716735
717            case 0x02:
718               return 0xff;   // bit 7 must be 1. Bit 2?
736         case 0x02:
737            return 0xff;   // bit 7 must be 1. Bit 2?
719738
720            default:
721               return 0xff;
739         default:
740            return 0xff;
722741         }
723742      }
724743
725744      case 1:
726745      {
727         switch( yarunara_select )
746         switch (state->input_sel)
728747         {
729            // player 2
730            case 0x01:   //quiztvqq
731            case 0x81:
732               return input_port_read(space->machine, keynames1[yarunara_ip++]);
748         // player 2
749         case 0x01:   //quiztvqq
750         case 0x81:
751            return input_port_read(space->machine, keynames1[state->keyb++]);
733752
734            // player 1
735            case 0x02:   //quiztvqq
736            case 0x82:
737               return input_port_read(space->machine, keynames0[yarunara_ip++]);
753         // player 1
754         case 0x02:   //quiztvqq
755         case 0x82:
756            return input_port_read(space->machine, keynames0[state->keyb++]);
738757
739            default:
740               return 0xff;
758         default:
759            return 0xff;
741760         }
742761      }
743762   }
r7640r7641
746765
747766static WRITE8_HANDLER( yarunara_rombank_w )
748767{
749   UINT8 *rom = memory_region(space->machine, "maincpu") + 0x10000 + 0x8000 * data;
750   memory_set_bankptr(space->machine, "bank1", rom);
768   dynax_state *state = (dynax_state *)space->machine->driver_data;
769   memory_set_bank(space->machine, "bank1", data);
751770
752   hnoridur_bank = data;
771   state->hnoridur_bank = data;
753772}
754773
755774static WRITE8_HANDLER( yarunara_flipscreen_w )
756775{
757   dynax_flipscreen_w(space,0,(data&2)?1:0);
776   dynax_flipscreen_w(space, 0, BIT(data, 1));
758777}
778
759779static WRITE8_HANDLER( yarunara_flipscreen_inv_w )
760780{
761   dynax_flipscreen_w(space,0,(data&2)?0:1);
781   dynax_flipscreen_w(space, 0, !BIT(data, 1));
762782}
763783
764784static WRITE8_HANDLER( yarunara_blit_romregion_w )
765785{
766786   switch(data)
767787   {
768      case 0x00:   dynax_blit_romregion_w(space,0,0);   return;
769      case 0x01:   dynax_blit_romregion_w(space,0,1);   return;
770      case 0x80:   dynax_blit_romregion_w(space,0,2);   return;
771      case 0x81:   dynax_blit_romregion_w(space,0,3);   return;
772      case 0x82:   dynax_blit_romregion_w(space,0,4);   return;   // mjcomv1
788      case 0x00:   dynax_blit_romregion_w(space, 0, 0);   return;
789      case 0x01:   dynax_blit_romregion_w(space, 0, 1);   return;
790      case 0x80:   dynax_blit_romregion_w(space, 0, 2);   return;
791      case 0x81:   dynax_blit_romregion_w(space, 0, 3);   return;
792      case 0x82:   dynax_blit_romregion_w(space, 0, 4);   return;   // mjcomv1
773793   }
774   logerror("%04x: unmapped romregion=%02X\n",cpu_get_pc(space->cpu),data);
794   logerror("%04x: unmapped romregion=%02X\n", cpu_get_pc(space->cpu), data);
775795}
776796
777797static ADDRESS_MAP_START( yarunara_io_map, ADDRESS_SPACE_IO, 8 )
778798   ADDRESS_MAP_GLOBAL_MASK(0xff)
779   AM_RANGE( 0x00, 0x01 ) AM_WRITE   ( yarunara_input_w         )   // Controls
780   AM_RANGE( 0x02, 0x03 ) AM_READ   ( yarunara_input_r         )   //
781   AM_RANGE( 0x11, 0x17 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
782   AM_RANGE( 0x20, 0x20 ) AM_DEVWRITE   ( "msm", adpcm_reset_w   )   // MSM5205 reset
783   AM_RANGE( 0x22, 0x22 ) AM_WRITE   ( adpcm_data_w            )   // MSM5205 data
784   AM_RANGE( 0x24, 0x25 ) AM_DEVWRITE( "ymsnd", ym2413_w   )   //
785   AM_RANGE( 0x28, 0x28 ) AM_DEVWRITE   ( "aysnd", ay8910_data_w   )   // AY8910
786   AM_RANGE( 0x2a, 0x2a ) AM_DEVWRITE   ( "aysnd", ay8910_address_w   )   //
787   AM_RANGE( 0x48, 0x48 ) AM_WRITE   ( dynax_extra_scrollx_w      )   // screen scroll X
788   AM_RANGE( 0x49, 0x49 ) AM_WRITE   ( dynax_extra_scrolly_w      )   // screen scroll Y
789   AM_RANGE( 0x4a, 0x4a ) AM_WRITE   ( yarunara_rombank_w      )   // BANK ROM Select
790   AM_RANGE( 0x4b, 0x4b ) AM_WRITE   ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
791   AM_RANGE( 0x4c, 0x4c ) AM_READ_PORT   ( "DSW0"            )   // DSW 1
792   AM_RANGE( 0x4f, 0x4f ) AM_READ_PORT   ( "DSW1"            )   // DSW 2
793   AM_RANGE( 0x50, 0x50 ) AM_WRITE   ( yarunara_flipscreen_w      )
794   AM_RANGE( 0x51, 0x51 ) AM_WRITE   ( yarunara_layer_half_w      )   // half of the interleaved layer to write to
795   AM_RANGE( 0x52, 0x52 ) AM_WRITE   ( yarunara_layer_half2_w   )   //
799   AM_RANGE( 0x00, 0x01 ) AM_WRITE(yarunara_input_w)      // Controls
800   AM_RANGE( 0x02, 0x03 ) AM_READ(yarunara_input_r)      //
801   AM_RANGE( 0x11, 0x17 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
802   AM_RANGE( 0x20, 0x20 ) AM_DEVWRITE("msm", adpcm_reset_w)   // MSM5205 reset
803   AM_RANGE( 0x22, 0x22 ) AM_WRITE(adpcm_data_w)         // MSM5205 data
804   AM_RANGE( 0x24, 0x25 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
805   AM_RANGE( 0x28, 0x28 ) AM_DEVWRITE("aysnd", ay8910_data_w)   // AY8910
806   AM_RANGE( 0x2a, 0x2a ) AM_DEVWRITE("aysnd", ay8910_address_w)   //
807   AM_RANGE( 0x48, 0x48 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
808   AM_RANGE( 0x49, 0x49 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
809   AM_RANGE( 0x4a, 0x4a ) AM_WRITE(yarunara_rombank_w)      // BANK ROM Select
810   AM_RANGE( 0x4b, 0x4b ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
811   AM_RANGE( 0x4c, 0x4c ) AM_READ_PORT("DSW0")         // DSW 1
812   AM_RANGE( 0x4f, 0x4f ) AM_READ_PORT("DSW1")         // DSW 2
813   AM_RANGE( 0x50, 0x50 ) AM_WRITE(yarunara_flipscreen_w)
814   AM_RANGE( 0x51, 0x51 ) AM_WRITE(yarunara_layer_half_w)   // half of the interleaved layer to write to
815   AM_RANGE( 0x52, 0x52 ) AM_WRITE(yarunara_layer_half2_w)   //
796816   // 53 ?
797817   // 54 ?
798   AM_RANGE( 0x57, 0x57 ) AM_WRITE   ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
799   AM_RANGE( 0x68, 0x68 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
800   AM_RANGE( 0x69, 0x69 ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
801   AM_RANGE( 0x6a, 0x6a ) AM_WRITE   ( dynax_blit_palette01_w   )   // Layers Palettes
802   AM_RANGE( 0x6b, 0x6b ) AM_WRITE   ( dynax_blit_palette23_w   )   //
803   AM_RANGE( 0x6c, 0x6c ) AM_WRITE   ( hanamai_priority_w      )   // layer priority and enable
804   AM_RANGE( 0x6d, 0x6d ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
805   AM_RANGE( 0x6e, 0x6e ) AM_WRITE   ( yarunara_blit_romregion_w   )   // Blitter ROM bank
818   AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
819   AM_RANGE( 0x68, 0x68 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
820   AM_RANGE( 0x69, 0x69 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
821   AM_RANGE( 0x6a, 0x6a ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes
822   AM_RANGE( 0x6b, 0x6b ) AM_WRITE(dynax_blit_palette23_w)   //
823   AM_RANGE( 0x6c, 0x6c ) AM_WRITE(hanamai_priority_w)      // layer priority and enable
824   AM_RANGE( 0x6d, 0x6d ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
825   AM_RANGE( 0x6e, 0x6e ) AM_WRITE(yarunara_blit_romregion_w)   // Blitter ROM bank
806826ADDRESS_MAP_END
807827
808828
809829// Almost identical to hnoridur
810830static ADDRESS_MAP_START( mcnpshnt_io_map, ADDRESS_SPACE_IO, 8 )
811831   ADDRESS_MAP_GLOBAL_MASK(0xff)
812   AM_RANGE( 0x01, 0x07 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
832   AM_RANGE( 0x01, 0x07 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
813833//  AM_RANGE( 0x10, 0x10 ) AM_WRITENOP   // CRT Controller
814834//  AM_RANGE( 0x11, 0x11 ) AM_WRITENOP   // CRT Controller
815   AM_RANGE( 0x20, 0x20 ) AM_WRITE   ( hanamai_keyboard_w      )   // keyboard row select
816   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT   ( "COINS"            )   // Coins
817   AM_RANGE( 0x22, 0x22 ) AM_READ   ( hanamai_keyboard_1_r      )   // P2
818   AM_RANGE( 0x23, 0x23 ) AM_READ   ( hanamai_keyboard_0_r      )   // P1
819   AM_RANGE( 0x24, 0x24 ) AM_READ_PORT   ( "DSW0"            )   // DSW2
820   AM_RANGE( 0x26, 0x26 ) AM_READ_PORT   ( "DSW1"            )   // DSW3
821   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE   ( "msm", adpcm_reset_w   )   // MSM5205 reset
822   AM_RANGE( 0x32, 0x32 ) AM_WRITE   ( adpcm_data_w            )   // MSM5205 data
823   AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE( "ymsnd", ym2413_w   )   //
824   AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE   ( "aysnd", ay8910_data_w   )   // AY8910
825   AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE   ( "aysnd", ay8910_address_w   )   //
826   AM_RANGE( 0x40, 0x40 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
827   AM_RANGE( 0x41, 0x41 ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
828   AM_RANGE( 0x42, 0x42 ) AM_WRITE   ( dynax_blit_palette01_w   )   // Layers Palettes
829   AM_RANGE( 0x43, 0x43 ) AM_WRITE   ( dynax_blit_palette23_w   )   //
830   AM_RANGE( 0x44, 0x44 ) AM_WRITE   ( hanamai_priority_w      )   // layer priority and enable
831   AM_RANGE( 0x45, 0x45 ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
832   AM_RANGE( 0x46, 0x46 ) AM_WRITE   ( yarunara_blit_romregion_w   )   // Blitter ROM bank
833   AM_RANGE( 0x47, 0x47 ) AM_WRITE   ( hnoridur_palbank_w      )
834   AM_RANGE( 0x50, 0x50 ) AM_WRITE   ( dynax_extra_scrollx_w      )   // screen scroll X
835   AM_RANGE( 0x51, 0x51 ) AM_WRITE   ( dynax_extra_scrolly_w      )   // screen scroll Y
836   AM_RANGE( 0x54, 0x54 ) AM_WRITE   ( hnoridur_rombank_w      )   // BANK ROM Select
837   AM_RANGE( 0x56, 0x56 ) AM_WRITE   ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
838   AM_RANGE( 0x57, 0x57 ) AM_READ   ( ret_ff               )   // ?
839   AM_RANGE( 0x60, 0x60 ) AM_WRITE   ( dynax_flipscreen_w      )   // Flip Screen
840   AM_RANGE( 0x61, 0x61 ) AM_WRITE   ( hanamai_layer_half_w      )   // half of the interleaved layer to write to
841   AM_RANGE( 0x62, 0x62 ) AM_WRITE   ( hnoridur_layer_half2_w   )   //
842   AM_RANGE( 0x67, 0x67 ) AM_WRITE   ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
843   AM_RANGE( 0x70, 0x70 ) AM_WRITE   ( dynax_coincounter_0_w      )   // Coin Counters
844   AM_RANGE( 0x71, 0x71 ) AM_WRITE   ( dynax_coincounter_1_w      )   //
835   AM_RANGE( 0x20, 0x20 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
836   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT("COINS")         // Coins
837   AM_RANGE( 0x22, 0x22 ) AM_READ(hanamai_keyboard_1_r)      // P2
838   AM_RANGE( 0x23, 0x23 ) AM_READ(hanamai_keyboard_0_r)      // P1
839   AM_RANGE( 0x24, 0x24 ) AM_READ_PORT("DSW0")         // DSW2
840   AM_RANGE( 0x26, 0x26 ) AM_READ_PORT("DSW1")         // DSW3
841   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE("msm", adpcm_reset_w)   // MSM5205 reset
842   AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w)         // MSM5205 data
843   AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
844   AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_data_w)   // AY8910
845   AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE("aysnd", ay8910_address_w)   //
846   AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
847   AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
848   AM_RANGE( 0x42, 0x42 ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes
849   AM_RANGE( 0x43, 0x43 ) AM_WRITE(dynax_blit_palette23_w)   //
850   AM_RANGE( 0x44, 0x44 ) AM_WRITE(hanamai_priority_w)      // layer priority and enable
851   AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
852   AM_RANGE( 0x46, 0x46 ) AM_WRITE(yarunara_blit_romregion_w)   // Blitter ROM bank
853   AM_RANGE( 0x47, 0x47 ) AM_WRITE(hnoridur_palbank_w)
854   AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
855   AM_RANGE( 0x51, 0x51 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
856   AM_RANGE( 0x54, 0x54 ) AM_WRITE(hnoridur_rombank_w)      // BANK ROM Select
857   AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
858   AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff)            // ?
859   AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
860   AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w)      // half of the interleaved layer to write to
861   AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w)   //
862   AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
863   AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counters
864   AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w)   //
845865ADDRESS_MAP_END
846866
847867
848868static ADDRESS_MAP_START( sprtmtch_io_map, ADDRESS_SPACE_IO, 8 )
849869   ADDRESS_MAP_GLOBAL_MASK(0xff)
850   AM_RANGE( 0x01, 0x07 ) AM_WRITE      ( dynax_blitter_rev2_w      )   // Blitter
851   AM_RANGE( 0x10, 0x11 ) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w   )   // 2 x DSW
870   AM_RANGE( 0x01, 0x07 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
871   AM_RANGE( 0x10, 0x11 ) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)   // 2 x DSW
852872//  AM_RANGE( 0x12, 0x12 ) AM_WRITENOP   // CRT Controller
853873//  AM_RANGE( 0x13, 0x13 ) AM_WRITENOP   // CRT Controller
854   AM_RANGE( 0x20, 0x20 ) AM_READ_PORT   ( "P1"                  )   // P1
855   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT   ( "P2"                  )   // P2
856   AM_RANGE( 0x22, 0x22 ) AM_READ_PORT   ( "COINS"               )   // Coins
857   AM_RANGE( 0x23, 0x23 ) AM_READ      ( ret_ff               )   // ?
858   AM_RANGE( 0x30, 0x30 ) AM_WRITE      ( dynax_layer_enable_w      )   // Layers Enable
859   AM_RANGE( 0x31, 0x31 ) AM_WRITE      ( dynax_rombank_w         )   // BANK ROM Select
860   AM_RANGE( 0x32, 0x32 ) AM_WRITE      ( dynax_blit_dest_w         )   // Destination Layer
861   AM_RANGE( 0x33, 0x33 ) AM_WRITE      ( dynax_blit_pen_w         )   // Destination Pen
862   AM_RANGE( 0x34, 0x34 ) AM_WRITE      ( dynax_blit_palette01_w   )   // Layers Palettes (Low Bits)
863   AM_RANGE( 0x35, 0x35 ) AM_WRITE      ( dynax_blit_palette23_w   )   //
864   AM_RANGE( 0x36, 0x36 ) AM_WRITE      ( dynax_blit_backpen_w      )   // Background Color
865   AM_RANGE( 0x37, 0x37 ) AM_WRITE      ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
866//  AM_RANGE( 0x40, 0x40 ) AM_DEVWRITE  ( "msm", adpcm_reset_w   )   // MSM5205 reset
867   AM_RANGE( 0x41, 0x41 ) AM_WRITE      ( dynax_flipscreen_w      )   // Flip Screen
868   AM_RANGE( 0x42, 0x42 ) AM_WRITE      ( dynax_coincounter_0_w      )   // Coin Counters
869   AM_RANGE( 0x43, 0x43 ) AM_WRITE      ( dynax_coincounter_1_w      )   //
870   AM_RANGE( 0x44, 0x44 ) AM_WRITE      ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
871   AM_RANGE( 0x45, 0x45 ) AM_WRITE      ( dynax_blit_palbank_w      )   // Layers Palettes (High Bit)
874   AM_RANGE( 0x20, 0x20 ) AM_READ_PORT("P1")            // P1
875   AM_RANGE( 0x21, 0x21 ) AM_READ_PORT("P2")            // P2
876   AM_RANGE( 0x22, 0x22 ) AM_READ_PORT("COINS")         // Coins
877   AM_RANGE( 0x23, 0x23 ) AM_READ(ret_ff)            // ?
878   AM_RANGE( 0x30, 0x30 ) AM_WRITE(dynax_layer_enable_w)      // Layers Enable
879   AM_RANGE( 0x31, 0x31 ) AM_WRITE(dynax_rombank_w)      // BANK ROM Select
880   AM_RANGE( 0x32, 0x32 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
881   AM_RANGE( 0x33, 0x33 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
882   AM_RANGE( 0x34, 0x34 ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes (Low Bits)
883   AM_RANGE( 0x35, 0x35 ) AM_WRITE(dynax_blit_palette23_w)   //
884   AM_RANGE( 0x36, 0x36 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
885   AM_RANGE( 0x37, 0x37 ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
886//  AM_RANGE( 0x40, 0x40 ) AM_DEVWRITE("msm", adpcm_reset_w)    // MSM5205 reset
887   AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
888   AM_RANGE( 0x42, 0x42 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counters
889   AM_RANGE( 0x43, 0x43 ) AM_WRITE(dynax_coincounter_1_w)   //
890   AM_RANGE( 0x44, 0x44 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
891   AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_palbank_w)      // Layers Palettes (High Bit)
872892ADDRESS_MAP_END
873893
874894
875895
876896static ADDRESS_MAP_START( mjfriday_io_map, ADDRESS_SPACE_IO, 8 )
877897   ADDRESS_MAP_GLOBAL_MASK(0xff)
878   AM_RANGE( 0x00, 0x00 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
879   AM_RANGE( 0x01, 0x01 ) AM_WRITE   ( dynax_blit_palette01_w   )   // Layers Palettes (Low Bits)
880   AM_RANGE( 0x02, 0x02 ) AM_WRITE   ( dynax_rombank_w         )   // BANK ROM Select
881   AM_RANGE( 0x03, 0x03 ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
882   AM_RANGE( 0x10, 0x11 ) AM_WRITE   ( mjdialq2_blit_dest_w      )   // Destination Layer
883   AM_RANGE( 0x12, 0x12 ) AM_WRITE   ( dynax_blit_palbank_w      )   // Layers Palettes (High Bit)
884   AM_RANGE( 0x13, 0x13 ) AM_WRITE   ( dynax_flipscreen_w      )   // Flip Screen
885   AM_RANGE( 0x14, 0x14 ) AM_WRITE   ( dynax_coincounter_0_w      )   // Coin Counters
886   AM_RANGE( 0x15, 0x15 ) AM_WRITE   ( dynax_coincounter_1_w      )   //
887   AM_RANGE( 0x16, 0x17 ) AM_WRITE   ( mjdialq2_layer_enable_w   )   // Layers Enable
888   AM_RANGE( 0x41, 0x47 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
898   AM_RANGE( 0x00, 0x00 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
899   AM_RANGE( 0x01, 0x01 ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes (Low Bits)
900   AM_RANGE( 0x02, 0x02 ) AM_WRITE(dynax_rombank_w)      // BANK ROM Select
901   AM_RANGE( 0x03, 0x03 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
902   AM_RANGE( 0x10, 0x11 ) AM_WRITE(mjdialq2_blit_dest_w)      // Destination Layer
903   AM_RANGE( 0x12, 0x12 ) AM_WRITE(dynax_blit_palbank_w)      // Layers Palettes (High Bit)
904   AM_RANGE( 0x13, 0x13 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
905   AM_RANGE( 0x14, 0x14 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counters
906   AM_RANGE( 0x15, 0x15 ) AM_WRITE(dynax_coincounter_1_w)   //
907   AM_RANGE( 0x16, 0x17 ) AM_WRITE(mjdialq2_layer_enable_w)   // Layers Enable
908   AM_RANGE( 0x41, 0x47 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
889909//  AM_RANGE( 0x50, 0x50 ) AM_WRITENOP   // CRT Controller
890910//  AM_RANGE( 0x51, 0x51 ) AM_WRITENOP   // CRT Controller
891   AM_RANGE( 0x60, 0x60 ) AM_WRITE   ( hanamai_keyboard_w      )   // keyboard row select
892   AM_RANGE( 0x61, 0x61 ) AM_READ_PORT   ( "COINS"            )   // Coins
893   AM_RANGE( 0x62, 0x62 ) AM_READ   ( hanamai_keyboard_1_r      )   // P2
894   AM_RANGE( 0x63, 0x63 ) AM_READ   ( hanamai_keyboard_0_r      )   // P1
895   AM_RANGE( 0x64, 0x64 ) AM_READ_PORT   ( "DSW0"            )   // DSW
896   AM_RANGE( 0x67, 0x67 ) AM_READ_PORT   ( "DSW1"            )   // DSW
897   AM_RANGE( 0x70, 0x71 ) AM_DEVWRITE ( "ymsnd", ym2413_w )   //
911   AM_RANGE( 0x60, 0x60 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
912   AM_RANGE( 0x61, 0x61 ) AM_READ_PORT("COINS")         // Coins
913   AM_RANGE( 0x62, 0x62 ) AM_READ(hanamai_keyboard_1_r)      // P2
914   AM_RANGE( 0x63, 0x63 ) AM_READ(hanamai_keyboard_0_r)      // P1
915   AM_RANGE( 0x64, 0x64 ) AM_READ_PORT("DSW0")         // DSW
916   AM_RANGE( 0x67, 0x67 ) AM_READ_PORT("DSW1")         // DSW
917   AM_RANGE( 0x70, 0x71 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
898918//  AM_RANGE( 0x80, 0x80 ) AM_WRITENOP   // IRQ ack?
899919ADDRESS_MAP_END
900920
901921
902922static ADDRESS_MAP_START( nanajign_io_map, ADDRESS_SPACE_IO, 8 )
903923   ADDRESS_MAP_GLOBAL_MASK(0xff)
904   AM_RANGE( 0x00, 0x00 ) AM_DEVWRITE   ( "msm", adpcm_reset_w   )   // MSM5205 reset
905   AM_RANGE( 0x02, 0x02 ) AM_WRITE   ( adpcm_data_w            )   // MSM5205 data
906   AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE( "ymsnd", ym2413_w   )   //
907   AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE   ( "aysnd", ay8910_data_w   )   // AY8910
908   AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE   ( "aysnd", ay8910_address_w   )   //
909   AM_RANGE( 0x10, 0x10 ) AM_WRITE   ( hanamai_keyboard_w      )   // keyboard row select
910   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT   ( "COINS"            )   // Coins
911   AM_RANGE( 0x12, 0x12 ) AM_READ   ( hanamai_keyboard_1_r      )   // P2
912   AM_RANGE( 0x13, 0x13 ) AM_READ   ( hanamai_keyboard_0_r      )   // P1
913   AM_RANGE( 0x14, 0x14 ) AM_READ_PORT   ( "DSW0"            )   // DSW1
914   AM_RANGE( 0x15, 0x15 ) AM_READ_PORT   ( "DSW1"            )   // DSW2
915   AM_RANGE( 0x16, 0x16 ) AM_READ_PORT   ( "DSW2"            )   // DSW3
924   AM_RANGE( 0x00, 0x00 ) AM_DEVWRITE("msm", adpcm_reset_w)   // MSM5205 reset
925   AM_RANGE( 0x02, 0x02 ) AM_WRITE(adpcm_data_w)         // MSM5205 data
926   AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
927   AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE("aysnd", ay8910_data_w)   // AY8910
928   AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE("aysnd", ay8910_address_w)   //
929   AM_RANGE( 0x10, 0x10 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
930   AM_RANGE( 0x11, 0x11 ) AM_READ_PORT("COINS")         // Coins
931   AM_RANGE( 0x12, 0x12 ) AM_READ(hanamai_keyboard_1_r)      // P2
932   AM_RANGE( 0x13, 0x13 ) AM_READ(hanamai_keyboard_0_r)      // P1
933   AM_RANGE( 0x14, 0x14 ) AM_READ_PORT("DSW0")         // DSW1
934   AM_RANGE( 0x15, 0x15 ) AM_READ_PORT("DSW1")         // DSW2
935   AM_RANGE( 0x16, 0x16 ) AM_READ_PORT("DSW2")         // DSW3
916936//  AM_RANGE( 0x20, 0x21 ) AM_WRITENOP   // CRT Controller
917   AM_RANGE( 0x31, 0x37 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
918   AM_RANGE( 0x40, 0x40 ) AM_WRITE   ( dynax_coincounter_0_w      )   // Coin Counter
919   AM_RANGE( 0x50, 0x50 ) AM_WRITE   ( dynax_flipscreen_w      )   // Flip Screen
920   AM_RANGE( 0x51, 0x51 ) AM_WRITE   ( hanamai_layer_half_w      )   // half of the interleaved layer to write to
921   AM_RANGE( 0x52, 0x52 ) AM_WRITE   ( hnoridur_layer_half2_w   )   //
922   AM_RANGE( 0x57, 0x57 ) AM_WRITE   ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
923   AM_RANGE( 0x60, 0x60 ) AM_WRITE   ( dynax_extra_scrollx_w      )   // screen scroll X
924   AM_RANGE( 0x62, 0x62 ) AM_WRITE   ( dynax_extra_scrolly_w      )   // screen scroll Y
925   AM_RANGE( 0x6a, 0x6a ) AM_WRITE   ( hnoridur_rombank_w      )   // BANK ROM Select
926   AM_RANGE( 0x6c, 0x6c ) AM_WRITE   ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
927   AM_RANGE( 0x70, 0x70 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
928   AM_RANGE( 0x71, 0x71 ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
929   AM_RANGE( 0x72, 0x72 ) AM_WRITE   ( dynax_blit_palette01_w   )   // Layers Palettes
930   AM_RANGE( 0x73, 0x73 ) AM_WRITE   ( dynax_blit_palette23_w   )   //
931   AM_RANGE( 0x74, 0x74 ) AM_WRITE   ( hanamai_priority_w      )   // layer priority and enable
932   AM_RANGE( 0x75, 0x75 ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
933   AM_RANGE( 0x76, 0x76 ) AM_WRITE   ( yarunara_blit_romregion_w   )   // Blitter ROM bank
934   AM_RANGE( 0x77, 0x77 ) AM_WRITE   ( hnoridur_palbank_w      )
937   AM_RANGE( 0x31, 0x37 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
938   AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counter
939   AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
940   AM_RANGE( 0x51, 0x51 ) AM_WRITE(hanamai_layer_half_w)      // half of the interleaved layer to write to
941   AM_RANGE( 0x52, 0x52 ) AM_WRITE(hnoridur_layer_half2_w)   //
942   AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
943   AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
944   AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
945   AM_RANGE( 0x6a, 0x6a ) AM_WRITE(hnoridur_rombank_w)      // BANK ROM Select
946   AM_RANGE( 0x6c, 0x6c ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
947   AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
948   AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
949   AM_RANGE( 0x72, 0x72 ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes
950   AM_RANGE( 0x73, 0x73 ) AM_WRITE(dynax_blit_palette23_w)   //
951   AM_RANGE( 0x74, 0x74 ) AM_WRITE(hanamai_priority_w)      // layer priority and enable
952   AM_RANGE( 0x75, 0x75 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
953   AM_RANGE( 0x76, 0x76 ) AM_WRITE(yarunara_blit_romregion_w)   // Blitter ROM bank
954   AM_RANGE( 0x77, 0x77 ) AM_WRITE(hnoridur_palbank_w)
935955ADDRESS_MAP_END
936956
937957
938
939
940
941958/***************************************************************************
942959                            Jantouki - Main CPU
943960***************************************************************************/
944961
945static UINT8 dynax_soundlatch_ack;
946static UINT8 dynax_soundlatch_full;
947static UINT8 latch;
948
949962static READ8_HANDLER( jantouki_soundlatch_ack_r )
950963{
951   return (dynax_soundlatch_ack) ? 0x80 : 0;
964   dynax_state *state = (dynax_state *)space->machine->driver_data;
965   return (state->soundlatch_ack) ? 0x80 : 0;
952966}
953967
954968static WRITE8_HANDLER( jantouki_soundlatch_w )
955969{
956   dynax_soundlatch_ack = 1;
957   dynax_soundlatch_full = 1;
958   dynax_soundlatch_irq = 1;
959   latch = data;
970   dynax_state *state = (dynax_state *)space->machine->driver_data;
971
972   state->soundlatch_ack = 1;
973   state->soundlatch_full = 1;
974   state->soundlatch_irq = 1;
975   state->latch = data;
960976   jantouki_sound_update_irq(space->machine);
961977}
962978
r7640r7641
967983
968984static WRITE8_HANDLER( jantouki_rombank_w )
969985{
970   UINT8 *ROM = memory_region(space->machine, "maincpu");
971   memory_set_bankptr(space->machine, "bank1",&ROM[0x8000 + 0x8000*(data&0x0f)]);
972   set_led_status(space->machine, 0,data & 0x10);   // maybe
986   memory_set_bank(space->machine, "bank1", data & 0x0f);
987   set_led_status(space->machine, 0, data & 0x10);   // maybe
973988}
974989
975990static ADDRESS_MAP_START( jantouki_io_map, ADDRESS_SPACE_IO, 8 )
976991   ADDRESS_MAP_GLOBAL_MASK(0xff)
977992//  AM_RANGE( 0x40, 0x41 ) AM_WRITENOP   // CRT Controller
978   AM_RANGE( 0x48, 0x48 ) AM_WRITE   ( jantouki_rombank_w      )   // BANK ROM Select
979   AM_RANGE( 0x49, 0x49 ) AM_WRITE   ( jantouki_soundlatch_w      )   // To Sound CPU
980   AM_RANGE( 0x4a, 0x4a ) AM_READ   ( jantouki_soundlatch_ack_r   )   // Soundlatch status
981   AM_RANGE( 0x4b, 0x4b ) AM_WRITE   ( dynax_blit2_dest_w      )   // Destination Layer 2
982   AM_RANGE( 0x4d, 0x4d ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
983   AM_RANGE( 0x4f, 0x4f ) AM_WRITE   ( dynax_blit2_romregion_w   )   // Blitter 2 ROM bank
984   AM_RANGE( 0x50, 0x50 ) AM_WRITE   ( jantouki_vblank_ack_w      )   // VBlank IRQ Ack
985   AM_RANGE( 0x51, 0x51 ) AM_WRITE   ( hanamai_keyboard_w      )   // keyboard row select
986   AM_RANGE( 0x52, 0x52 ) AM_READ   ( hanamai_keyboard_0_r      )   // P1
987   AM_RANGE( 0x54, 0x54 ) AM_READ_PORT   ( "COINS"            )   // Coins
988   AM_RANGE( 0x55, 0x55 ) AM_READ_PORT   ( "DSW0"            )   // DSW1
989   AM_RANGE( 0x56, 0x56 ) AM_READ_PORT   ( "DSW1"            )   // DSW2
990   AM_RANGE( 0x58, 0x58 ) AM_WRITE   ( dynax_coincounter_0_w      )   // Coin Counter
991   AM_RANGE( 0x5b, 0x5b ) AM_WRITE   ( dynax_blit2_palbank_w      )   // Layers Palettes (High Bit)
992   AM_RANGE( 0x5d, 0x5d ) AM_WRITE   ( dynax_blit_palbank_w      )   //
993   AM_RANGE( 0x5e, 0x5e ) AM_WRITE   ( jantouki_blitter_ack_w   )   // Blitter IRQ Ack
994   AM_RANGE( 0x5f, 0x5f ) AM_WRITE   ( jantouki_blitter2_ack_w   )   // Blitter 2 IRQ Ack
995   AM_RANGE( 0x60, 0x60 ) AM_WRITE   ( dynax_blit_palette67_w   )   // Layers Palettes (Low Bits)
996   AM_RANGE( 0x61, 0x61 ) AM_WRITE   ( dynax_blit_palette45_w   )   //
997   AM_RANGE( 0x62, 0x62 ) AM_WRITE   ( dynax_blit_palette23_w   )   //
998   AM_RANGE( 0x63, 0x63 ) AM_WRITE   ( dynax_blit_palette01_w   )   //
999   AM_RANGE( 0x64, 0x64 ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
1000   AM_RANGE( 0x65, 0x65 ) AM_WRITE   ( dynax_blit2_pen_w         )   // Destination Pen 2
1001   AM_RANGE( 0x66, 0x66 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
1002   AM_RANGE( 0x67, 0x67 ) AM_READ   ( jantouki_blitter_busy_r   )   //
1003   AM_RANGE( 0x69, 0x6f ) AM_WRITE   ( jantouki_blitter2_rev2_w   )   // Blitter 2
1004   AM_RANGE( 0x71, 0x77 ) AM_WRITE   ( jantouki_blitter_rev2_w   )   // Blitter
1005   AM_RANGE( 0x78, 0x7e ) AM_WRITE   ( jantouki_layer_enable_w   )   // Layers Enable
993   AM_RANGE( 0x48, 0x48 ) AM_WRITE(jantouki_rombank_w)      // BANK ROM Select
994   AM_RANGE( 0x49, 0x49 ) AM_WRITE(jantouki_soundlatch_w)   // To Sound CPU
995   AM_RANGE( 0x4a, 0x4a ) AM_READ(jantouki_soundlatch_ack_r)   // Soundlatch status
996   AM_RANGE( 0x4b, 0x4b ) AM_WRITE(dynax_blit2_dest_w)      // Destination Layer 2
997   AM_RANGE( 0x4d, 0x4d ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
998   AM_RANGE( 0x4f, 0x4f ) AM_WRITE(dynax_blit2_romregion_w)   // Blitter 2 ROM bank
999   AM_RANGE( 0x50, 0x50 ) AM_WRITE(jantouki_vblank_ack_w)   // VBlank IRQ Ack
1000   AM_RANGE( 0x51, 0x51 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
1001   AM_RANGE( 0x52, 0x52 ) AM_READ(hanamai_keyboard_0_r)      // P1
1002   AM_RANGE( 0x54, 0x54 ) AM_READ_PORT("COINS")         // Coins
1003   AM_RANGE( 0x55, 0x55 ) AM_READ_PORT("DSW0")         // DSW1
1004   AM_RANGE( 0x56, 0x56 ) AM_READ_PORT("DSW1")         // DSW2
1005   AM_RANGE( 0x58, 0x58 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counter
1006   AM_RANGE( 0x5b, 0x5b ) AM_WRITE(dynax_blit2_palbank_w)   // Layers Palettes (High Bit)
1007   AM_RANGE( 0x5d, 0x5d ) AM_WRITE(dynax_blit_palbank_w)      //
1008   AM_RANGE( 0x5e, 0x5e ) AM_WRITE(jantouki_blitter_ack_w)   // Blitter IRQ Ack
1009   AM_RANGE( 0x5f, 0x5f ) AM_WRITE(jantouki_blitter2_ack_w)   // Blitter 2 IRQ Ack
1010   AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_blit_palette67_w)   // Layers Palettes (Low Bits)
1011   AM_RANGE( 0x61, 0x61 ) AM_WRITE(dynax_blit_palette45_w)   //
1012   AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_blit_palette23_w)   //
1013   AM_RANGE( 0x63, 0x63 ) AM_WRITE(dynax_blit_palette01_w)   //
1014   AM_RANGE( 0x64, 0x64 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
1015   AM_RANGE( 0x65, 0x65 ) AM_WRITE(dynax_blit2_pen_w)      // Destination Pen 2
1016   AM_RANGE( 0x66, 0x66 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
1017   AM_RANGE( 0x67, 0x67 ) AM_READ(jantouki_blitter_busy_r)   //
1018   AM_RANGE( 0x69, 0x6f ) AM_WRITE(jantouki_blitter2_rev2_w)   // Blitter 2
1019   AM_RANGE( 0x71, 0x77 ) AM_WRITE(jantouki_blitter_rev2_w)   // Blitter
1020   AM_RANGE( 0x78, 0x7e ) AM_WRITE(jantouki_layer_enable_w)   // Layers Enable
10061021ADDRESS_MAP_END
10071022
10081023/***************************************************************************
r7640r7641
10111026
10121027static WRITE8_HANDLER( jantouki_soundlatch_ack_w )
10131028{
1014   dynax_soundlatch_ack = data;
1015   dynax_soundlatch_irq = 0;
1029   dynax_state *state = (dynax_state *)space->machine->driver_data;
1030   state->soundlatch_ack = data;
1031   state->soundlatch_irq = 0;
10161032   jantouki_sound_update_irq(space->machine);
10171033}
10181034
10191035static READ8_HANDLER( jantouki_soundlatch_r )
10201036{
1021   dynax_soundlatch_full = 0;
1022   return latch;
1037   dynax_state *state = (dynax_state *)space->machine->driver_data;
1038   state->soundlatch_full = 0;
1039   return state->latch;
10231040}
10241041
10251042static READ8_HANDLER( jantouki_soundlatch_status_r )
10261043{
1027   return (dynax_soundlatch_full) ? 0 : 0x80;
1044   dynax_state *state = (dynax_state *)space->machine->driver_data;
1045   return (state->soundlatch_full) ? 0 : 0x80;
10281046}
10291047
10301048static ADDRESS_MAP_START( jantouki_sound_io_map, ADDRESS_SPACE_IO, 8 )
10311049   ADDRESS_MAP_GLOBAL_MASK(0xff)
1032   AM_RANGE( 0x00, 0x00 ) AM_WRITE      ( jantouki_sound_rombank_w      )   // BANK ROM Select
1033   AM_RANGE( 0x10, 0x10 ) AM_WRITE      ( jantouki_sound_vblank_ack_w   )   // VBlank IRQ Ack
1034   AM_RANGE( 0x21, 0x21 ) AM_DEVREAD   ( "aysnd", ay8910_r         )   // AY8910
1035   AM_RANGE( 0x22, 0x23 ) AM_DEVWRITE   ( "aysnd", ay8910_data_address_w )   //
1050   AM_RANGE( 0x00, 0x00 ) AM_WRITE(jantouki_sound_rombank_w)      // BANK ROM Select
1051   AM_RANGE( 0x10, 0x10 ) AM_WRITE(jantouki_sound_vblank_ack_w)   // VBlank IRQ Ack
1052   AM_RANGE( 0x21, 0x21 ) AM_DEVREAD("aysnd", ay8910_r)         // AY8910
1053   AM_RANGE( 0x22, 0x23 ) AM_DEVWRITE("aysnd", ay8910_data_address_w)   //
10361054   AM_RANGE( 0x28, 0x29 ) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)   //
1037   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE   ( "msm", adpcm_reset_w   )   // MSM5205 reset
1038   AM_RANGE( 0x40, 0x40 ) AM_WRITE      ( adpcm_data_w               )   // MSM5205 data
1039   AM_RANGE( 0x50, 0x50 ) AM_READ      ( jantouki_soundlatch_status_r   )   // Soundlatch status
1040   AM_RANGE( 0x60, 0x60 ) AM_WRITE      ( jantouki_soundlatch_ack_w      )   // Soundlatch status
1041   AM_RANGE( 0x70, 0x70 ) AM_READ      ( jantouki_soundlatch_r         )   // From Main CPU
1055   AM_RANGE( 0x30, 0x30 ) AM_DEVWRITE("msm", adpcm_reset_w)      // MSM5205 reset
1056   AM_RANGE( 0x40, 0x40 ) AM_WRITE(adpcm_data_w)            // MSM5205 data
1057   AM_RANGE( 0x50, 0x50 ) AM_READ(jantouki_soundlatch_status_r)   // Soundlatch status
1058   AM_RANGE( 0x60, 0x60 ) AM_WRITE(jantouki_soundlatch_ack_w)      // Soundlatch status
1059   AM_RANGE( 0x70, 0x70 ) AM_READ(jantouki_soundlatch_r)         // From Main CPU
10421060ADDRESS_MAP_END
10431061
10441062
r7640r7641
10541072
10551073static READ8_HANDLER( mjelctrn_dsw_r )
10561074{
1057   int dsw = (keyb & 0xc0) >> 6;
1075   dynax_state *state = (dynax_state *)space->machine->driver_data;
1076   int dsw = (state->keyb & 0xc0) >> 6;
10581077   static const char *const dswnames[] = { "DSW0", "DSW1", "DSW3", "DSW4" };
10591078
10601079   return input_port_read(space->machine, dswnames[dsw]);
r7640r7641
10621081
10631082static WRITE8_HANDLER( mjelctrn_blitter_ack_w )
10641083{
1065   dynax_blitter_irq = 0;
1084   dynax_state *state = (dynax_state *)space->machine->driver_data;
1085   state->blitter_irq = 0;
10661086}
10671087
10681088static ADDRESS_MAP_START( mjelctrn_io_map, ADDRESS_SPACE_IO, 8 )
10691089   ADDRESS_MAP_GLOBAL_MASK(0xff)
1070   AM_RANGE( 0x00, 0x00 ) AM_DEVWRITE   ( "msm", adpcm_reset_w   )   // MSM5205 reset
1071   AM_RANGE( 0x02, 0x02 ) AM_WRITE   ( adpcm_data_w            )   // MSM5205 data
1072   AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE( "ymsnd", ym2413_w   )   //
1073   AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE( "aysnd", ay8910_data_w   )   // AY8910
1074   AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE( "aysnd", ay8910_address_w   )   //
1075   AM_RANGE( 0x11, 0x12 ) AM_WRITE   ( mjelctrn_blitter_ack_w   )   //?
1090   AM_RANGE( 0x00, 0x00 ) AM_DEVWRITE("msm", adpcm_reset_w)   // MSM5205 reset
1091   AM_RANGE( 0x02, 0x02 ) AM_WRITE(adpcm_data_w)         // MSM5205 data
1092   AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
1093   AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE("aysnd", ay8910_data_w)   // AY8910
1094   AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE("aysnd", ay8910_address_w)   //
1095   AM_RANGE( 0x11, 0x12 ) AM_WRITE(mjelctrn_blitter_ack_w)   //?
10761096//  AM_RANGE( 0x20, 0x20 ) AM_WRITENOP   // CRT Controller
10771097//  AM_RANGE( 0x21, 0x21 ) AM_WRITENOP   // CRT Controller
1078   AM_RANGE( 0x40, 0x40 ) AM_WRITE   ( dynax_coincounter_0_w      )   // Coin Counters
1079   AM_RANGE( 0x41, 0x41 ) AM_WRITE   ( dynax_coincounter_1_w      )   //
1080   AM_RANGE( 0x60, 0x60 ) AM_WRITE   ( dynax_extra_scrollx_w      )   // screen scroll X
1081   AM_RANGE( 0x62, 0x62 ) AM_WRITE   ( dynax_extra_scrolly_w      )   // screen scroll Y
1082//  AM_RANGE( 0x64, 0x64 ) AM_WRITE ( dynax_extra_scrollx_w     )   // screen scroll X
1083//  AM_RANGE( 0x66, 0x66 ) AM_WRITE ( dynax_extra_scrolly_w     )   // screen scroll Y
1084   AM_RANGE( 0x6a, 0x6a ) AM_WRITE   ( hnoridur_rombank_w      )   // BANK ROM Select
1085   AM_RANGE( 0x80, 0x80 ) AM_WRITE   ( hanamai_keyboard_w      )   // keyboard row select
1086   AM_RANGE( 0x81, 0x81 ) AM_READ_PORT   ( "COINS"            )   // Coins
1087   AM_RANGE( 0x82, 0x82 ) AM_READ   ( mjelctrn_keyboard_1_r      )   // P2
1088   AM_RANGE( 0x83, 0x83 ) AM_READ   ( hanamai_keyboard_0_r      )   // P1
1089   AM_RANGE( 0x84, 0x84 ) AM_READ   ( mjelctrn_dsw_r         )   // DSW x 4
1090   AM_RANGE( 0x85, 0x85 ) AM_READ   ( ret_ff               )   // ?
1091   AM_RANGE( 0xa1, 0xa7 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
1092   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE   ( dynax_flipscreen_w      )   // Flip Screen
1093   AM_RANGE( 0xc1, 0xc1 ) AM_WRITE   ( hanamai_layer_half_w      )   // half of the interleaved layer to write to
1094   AM_RANGE( 0xc2, 0xc2 ) AM_WRITE   ( hnoridur_layer_half2_w   )   //
1098   AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w)   // Coin Counters
1099   AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_coincounter_1_w)   //
1100   AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
1101   AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
1102//  AM_RANGE( 0x64, 0x64 ) AM_WRITE(dynax_extra_scrollx_w)      // screen scroll X
1103//  AM_RANGE( 0x66, 0x66 ) AM_WRITE(dynax_extra_scrolly_w)      // screen scroll Y
1104   AM_RANGE( 0x6a, 0x6a ) AM_WRITE(hnoridur_rombank_w)      // BANK ROM Select
1105   AM_RANGE( 0x80, 0x80 ) AM_WRITE(hanamai_keyboard_w)      // keyboard row select
1106   AM_RANGE( 0x81, 0x81 ) AM_READ_PORT("COINS")         // Coins
1107   AM_RANGE( 0x82, 0x82 ) AM_READ(mjelctrn_keyboard_1_r)      // P2
1108   AM_RANGE( 0x83, 0x83 ) AM_READ(hanamai_keyboard_0_r)      // P1
1109   AM_RANGE( 0x84, 0x84 ) AM_READ(mjelctrn_dsw_r)         // DSW x 4
1110   AM_RANGE( 0x85, 0x85 ) AM_READ(ret_ff)            // ?
1111   AM_RANGE( 0xa1, 0xa7 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
1112   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_flipscreen_w)      // Flip Screen
1113   AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(hanamai_layer_half_w)      // half of the interleaved layer to write to
1114   AM_RANGE( 0xc2, 0xc2 ) AM_WRITE(hnoridur_layer_half2_w)   //
10951115//  c3,c4   seem to be related to wrap around enable
1096   AM_RANGE( 0xe0, 0xe0 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
1097   AM_RANGE( 0xe1, 0xe1 ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
1098   AM_RANGE( 0xe2, 0xe2 ) AM_WRITE   ( dynax_blit_palette01_w   )   // Layers Palettes
1099   AM_RANGE( 0xe3, 0xe3 ) AM_WRITE   ( dynax_blit_palette23_w   )   //
1100   AM_RANGE( 0xe4, 0xe4 ) AM_WRITE   ( hanamai_priority_w      )   // layer priority and enable
1101   AM_RANGE( 0xe5, 0xe5 ) AM_WRITE   ( dynax_blit_backpen_w      )   // Background Color
1102   AM_RANGE( 0xe6, 0xe6 ) AM_WRITE   ( yarunara_blit_romregion_w   )   // Blitter ROM bank
1103   AM_RANGE( 0xe7, 0xe7 ) AM_WRITE   ( hnoridur_palbank_w      )
1116   AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
1117   AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
1118   AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(dynax_blit_palette01_w)   // Layers Palettes
1119   AM_RANGE( 0xe3, 0xe3 ) AM_WRITE(dynax_blit_palette23_w)   //
1120   AM_RANGE( 0xe4, 0xe4 ) AM_WRITE(hanamai_priority_w)      // layer priority and enable
1121   AM_RANGE( 0xe5, 0xe5 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
1122   AM_RANGE( 0xe6, 0xe6 ) AM_WRITE(yarunara_blit_romregion_w)   // Blitter ROM bank
1123   AM_RANGE( 0xe7, 0xe7 ) AM_WRITE(hnoridur_palbank_w)
11041124ADDRESS_MAP_END
11051125
11061126
r7640r7641
11081128                            Hanafuda Hana Tengoku
11091129***************************************************************************/
11101130
1111static UINT8 htengoku_select, htengoku_dsw, htengoku_ip, htengoku_coins, htengoku_hopper;
11121131static WRITE8_HANDLER( htengoku_select_w )
11131132{
1114   htengoku_select = data;
1115   htengoku_ip = 0;
1133   dynax_state *state = (dynax_state *)space->machine->driver_data;
1134   state->input_sel = data;
1135   state->keyb = 0;
11161136}
11171137
11181138static WRITE8_DEVICE_HANDLER( htengoku_dsw_w )
11191139{
1120   htengoku_dsw = data;
1140   dynax_state *state = (dynax_state *)device->machine->driver_data;
1141   state->dsw_sel = data;
11211142}
1143
11221144static READ8_DEVICE_HANDLER( htengoku_dsw_r )
11231145{
1124   if (!(htengoku_dsw & 0x01))   return input_port_read(device->machine, "DSW0");
1125   if (!(htengoku_dsw & 0x02))   return input_port_read(device->machine, "DSW1");
1126   if (!(htengoku_dsw & 0x04))   return input_port_read(device->machine, "DSW2");
1127   if (!(htengoku_dsw & 0x08))   return input_port_read(device->machine, "DSW3");
1128   if (!(htengoku_dsw & 0x10))   return input_port_read(device->machine, "DSW4");
1129   logerror("%s: warning, unknown bits read, htengoku_dsw = %02x\n", cpuexec_describe_context(device->machine), htengoku_dsw);
1146   dynax_state *state = (dynax_state *)device->machine->driver_data;
1147   if (!BIT(state->dsw_sel, 0))   return input_port_read(device->machine, "DSW0");
1148   if (!BIT(state->dsw_sel, 1))   return input_port_read(device->machine, "DSW1");
1149   if (!BIT(state->dsw_sel, 2))   return input_port_read(device->machine, "DSW2");
1150   if (!BIT(state->dsw_sel, 3))   return input_port_read(device->machine, "DSW3");
1151   if (!BIT(state->dsw_sel, 4))   return input_port_read(device->machine, "DSW4");
1152   logerror("%s: warning, unknown bits read, dsw_sel = %02x\n", cpuexec_describe_context(device->machine), state->dsw_sel);
11301153
11311154   return 0xff;
11321155}
11331156
11341157static WRITE8_HANDLER( htengoku_coin_w )
11351158{
1136   switch ( htengoku_select )
1159   dynax_state *state = (dynax_state *)space->machine->driver_data;
1160
1161   switch (state->input_sel)
11371162   {
11381163      case 0x0c:
11391164         // bit 0 = coin counter
11401165         // bit 1 = out counter
11411166         // bit 2 = hopper
11421167         coin_counter_w(space->machine, 0, data & 1);
1143         htengoku_hopper = data & 0x04;
1168         state->hopper = data & 0x04;
11441169#ifdef MAME_DEBUG
11451170//          popmessage("COINS %02x",data);
11461171#endif
1147         htengoku_coins = data;
1172         state->coins = data;
11481173
11491174      case 0x0d:   break;   // ff resets input port sequence?
11501175
11511176      case 0xff:   break;   // CRT controller?
11521177      default:
1153         logerror("%04x: coins_w with select = %02x, data = %02x\n", cpu_get_pc(space->cpu), htengoku_select,data);
1178         logerror("%04x: coins_w with select = %02x, data = %02x\n", cpu_get_pc(space->cpu), state->input_sel, data);
11541179   }
11551180}
11561181
11571182static READ8_HANDLER( htengoku_input_r )
11581183{
1184   dynax_state *state = (dynax_state *)space->machine->driver_data;
11591185   static const char *const keynames0[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4" };
11601186   static const char *const keynames1[] = { "KEY5", "KEY6", "KEY7", "KEY8", "KEY9" };
11611187
1162   switch( htengoku_select )
1188   switch (state->input_sel)
11631189   {
1164      case 0x81:   return input_port_read(space->machine, keynames1[htengoku_ip++]);
1165      case 0x82:   return input_port_read(space->machine, keynames0[htengoku_ip++]);
1190      case 0x81:   return input_port_read(space->machine, keynames1[state->keyb++]);
1191      case 0x82:   return input_port_read(space->machine, keynames0[state->keyb++]);
11661192      case 0x0d:   return 0xff;   // unused
11671193   }
1168   logerror("%04x: input_r with select = %02x\n", cpu_get_pc(space->cpu), htengoku_select);
1194   logerror("%04x: input_r with select = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
11691195   return 0xff;
11701196}
11711197
11721198static READ8_HANDLER( htengoku_coin_r )
11731199{
1174   switch( htengoku_select )
1200   dynax_state *state = (dynax_state *)space->machine->driver_data;
1201
1202   switch (state->input_sel)
11751203   {
11761204      case 0x00:   return input_port_read(space->machine, "COINS");
11771205      case 0x01:   return 0xff;   //?
1178      case 0x02:   return 0xbf | ((htengoku_hopper && !(video_screen_get_frame_number(space->machine->primary_screen)%10)) ? 0 : (1<<6));   // bit 7 = blitter busy, bit 6 = hopper
1179      case 0x03:   return htengoku_coins;
1206      case 0x02:   return 0xbf | ((state->hopper && !(video_screen_get_frame_number(space->machine->primary_screen) % 10)) ? 0 : (1 << 6));   // bit 7 = blitter busy, bit 6 = hopper
1207      case 0x03:   return state->coins;
11801208   }
1181   logerror("%04x: coin_r with select = %02x\n", cpu_get_pc(space->cpu), htengoku_select);
1209   logerror("%04x: coin_r with select = %02x\n", cpu_get_pc(space->cpu), state->input_sel);
11821210   return 0xff;
11831211}
11841212
11851213static WRITE8_HANDLER( htengoku_rombank_w )
11861214{
1187   UINT8 *rom = memory_region(space->machine, "maincpu") + 0x10000 + 0x8000 * (data & 0x7);
1188   memory_set_bankptr(space->machine, "bank1", rom);
1215   dynax_state *state = (dynax_state *)space->machine->driver_data;
11891216
1190   hnoridur_bank = data;
1217   memory_set_bank(space->machine, "bank1", data & 0x07);
1218   state->hnoridur_bank = data;
11911219}
11921220
11931221static WRITE8_HANDLER( htengoku_blit_romregion_w )
11941222{
1195   switch(data)
1223   switch (data)
11961224   {
1197      case 0x80:   dynax_blit_romregion_w(space,0,0);   return;
1198      case 0x81:   dynax_blit_romregion_w(space,0,1);   return;
1199      case 0x00:   dynax_blit_romregion_w(space,0,2);   return;
1225      case 0x80:   dynax_blit_romregion_w(space, 0, 0);   return;
1226      case 0x81:   dynax_blit_romregion_w(space, 0, 1);   return;
1227      case 0x00:   dynax_blit_romregion_w(space, 0, 2);   return;
12001228   }
1201   logerror("%04x: unmapped romregion=%02X\n",cpu_get_pc(space->cpu),data);
1229   logerror("%04x: unmapped romregion=%02X\n", cpu_get_pc(space->cpu), data);
12021230}
12031231
12041232static READ8_HANDLER( unk_r )
r7640r7641
12081236
12091237static ADDRESS_MAP_START( htengoku_io_map, ADDRESS_SPACE_IO, 8 )
12101238   ADDRESS_MAP_GLOBAL_MASK(0xff)
1211   AM_RANGE( 0x01, 0x07 ) AM_WRITE   ( dynax_blitter_rev2_w      )   // Blitter
1212   AM_RANGE( 0x20, 0x20 ) AM_WRITE   ( htengoku_select_w         )   // Controls
1213   AM_RANGE( 0x21, 0x21 ) AM_WRITE ( htengoku_coin_w         )   //
1214   AM_RANGE( 0x22, 0x22 ) AM_READ   ( htengoku_coin_r         )   //
1215   AM_RANGE( 0x23, 0x23 ) AM_READ   ( htengoku_input_r         )   //
1216   AM_RANGE( 0x40, 0x40 ) AM_DEVWRITE   ( "aysnd", ay8910_address_w   )   // AY8910
1217   AM_RANGE( 0x42, 0x42 ) AM_DEVREAD  ( "aysnd", ay8910_r      )   //
1218   AM_RANGE( 0x44, 0x44 ) AM_DEVWRITE   ( "aysnd", ay8910_data_w)   //
1219   AM_RANGE( 0x46, 0x47 ) AM_DEVWRITE( "ymsnd", ym2413_w   )   //
1239   AM_RANGE( 0x01, 0x07 ) AM_WRITE(dynax_blitter_rev2_w)      // Blitter
1240   AM_RANGE( 0x20, 0x20 ) AM_WRITE(htengoku_select_w)      // Controls
1241   AM_RANGE( 0x21, 0x21 ) AM_WRITE(htengoku_coin_w)      //
1242   AM_RANGE( 0x22, 0x22 ) AM_READ(htengoku_coin_r)         //
1243   AM_RANGE( 0x23, 0x23 ) AM_READ(htengoku_input_r)      //
1244   AM_RANGE( 0x40, 0x40 ) AM_DEVWRITE("aysnd", ay8910_address_w)   // AY8910
1245   AM_RANGE( 0x42, 0x42 ) AM_DEVREAD("aysnd", ay8910_r)      //
1246   AM_RANGE( 0x44, 0x44 ) AM_DEVWRITE("aysnd", ay8910_data_w)   //
1247   AM_RANGE( 0x46, 0x47 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
12201248   AM_RANGE( 0x80, 0x8f ) AM_DEVREADWRITE("rtc", msm6242_r, msm6242_w)   // 6242RTC
1221   AM_RANGE( 0xa0, 0xa3 ) AM_WRITE ( ddenlovr_palette_base_w      )   // ddenlovr mixer chip
1222   AM_RANGE( 0xa4, 0xa7 ) AM_WRITE ( ddenlovr_palette_mask_w      )
1223   AM_RANGE( 0xa8, 0xab ) AM_WRITE ( ddenlovr_transparency_pen_w   )
1224   AM_RANGE( 0xac, 0xaf ) AM_WRITE ( ddenlovr_transparency_mask_w   )
1249   AM_RANGE( 0xa0, 0xa3 ) AM_WRITE(ddenlovr_palette_base_w)   // ddenlovr mixer chip
1250   AM_RANGE( 0xa4, 0xa7 ) AM_WRITE(ddenlovr_palette_mask_w)
1251   AM_RANGE( 0xa8, 0xab ) AM_WRITE(ddenlovr_transparency_pen_w)
1252   AM_RANGE( 0xac, 0xaf ) AM_WRITE(ddenlovr_transparency_mask_w)
12251253   // b0-b3 ?
1226   AM_RANGE( 0xb4, 0xb4 ) AM_WRITE ( ddenlovr_bgcolor_w         )
1227   AM_RANGE( 0xb5, 0xb5 ) AM_WRITE ( ddenlovr_priority_w         )
1228   AM_RANGE( 0xb6, 0xb6 ) AM_WRITE ( ddenlovr_layer_enable_w      )
1229   AM_RANGE( 0xb8, 0xb8 ) AM_READ  ( unk_r                     )   // ? must be 78 on startup
1230   AM_RANGE( 0xc2, 0xc2 ) AM_WRITE   ( htengoku_rombank_w      )   // BANK ROM Select
1231   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE   ( dynax_extra_scrollx_w      )   // screen scroll X
1232   AM_RANGE( 0xc1, 0xc1 ) AM_WRITE   ( dynax_extra_scrolly_w      )   // screen scroll Y
1233   AM_RANGE( 0xc3, 0xc3 ) AM_WRITE   ( dynax_vblank_ack_w      )   // VBlank IRQ Ack
1234   AM_RANGE( 0xc4, 0xc4 ) AM_WRITE   ( dynax_blit_pen_w         )   // Destination Pen
1235   AM_RANGE( 0xc5, 0xc5 ) AM_WRITE   ( dynax_blit_dest_w         )   // Destination Layer
1236   AM_RANGE( 0xc6, 0xc6 ) AM_WRITE   ( htengoku_blit_romregion_w   )   // Blitter ROM bank
1237   AM_RANGE( 0xe0, 0xe0 ) AM_WRITE   ( yarunara_flipscreen_w      )
1238   AM_RANGE( 0xe1, 0xe1 ) AM_WRITE   ( yarunara_layer_half_w      )   // half of the interleaved layer to write to
1239   AM_RANGE( 0xe2, 0xe2 ) AM_WRITE   ( yarunara_layer_half2_w   )   //
1240   AM_RANGE( 0xe5, 0xe5 ) AM_WRITE   ( dynax_blitter_ack_w      )   // Blitter IRQ Ack
1254   AM_RANGE( 0xb4, 0xb4 ) AM_WRITE(ddenlovr_bgcolor_w)
1255   AM_RANGE( 0xb5, 0xb5 ) AM_WRITE(ddenlovr_priority_w)
1256   AM_RANGE( 0xb6, 0xb6 ) AM_WRITE(ddenlovr_layer_enable_w)
1257   AM_RANGE( 0xb8, 0xb8 ) AM_READ(unk_r)            // ? must be 78 on startup
1258   AM_RANGE( 0xc2, 0xc2 ) AM_WRITE(htengoku_rombank_w)      // BANK ROM Select
1259   AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_extra_scrollx_w)   // screen scroll X
1260   AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(dynax_extra_scrolly_w)   // screen scroll Y
1261   AM_RANGE( 0xc3, 0xc3 ) AM_WRITE(dynax_vblank_ack_w)      // VBlank IRQ Ack
1262   AM_RANGE( 0xc4, 0xc4 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
1263   AM_RANGE( 0xc5, 0xc5 ) AM_WRITE(dynax_blit_dest_w)      // Destination Layer
1264   AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(htengoku_blit_romregion_w)   // Blitter ROM bank
1265   AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(yarunara_flipscreen_w)
1266   AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(yarunara_layer_half_w)   // half of the interleaved layer to write to
1267   AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(yarunara_layer_half2_w)   //
1268   AM_RANGE( 0xe5, 0xe5 ) AM_WRITE(dynax_blitter_ack_w)      // Blitter IRQ Ack
12411269ADDRESS_MAP_END
12421270
12431271
r7640r7641
12451273                               Mahjong Tenkaigen
12461274***************************************************************************/
12471275
1248static int rombank;
1249static UINT8 *romptr;
1250static int tenkai_dswsel, tenkai_ipsel, tenkai_ip;
1251static UINT8 tenkai_p5_val;
1252
12531276static WRITE8_HANDLER( tenkai_ipsel_w )
12541277{
1278   dynax_state *state = (dynax_state *)space->machine->driver_data;
12551279   switch (offset)
12561280   {
1257      case 0:   tenkai_ipsel = data;
1258            tenkai_ip = 0;
1259            break;
1281   case 0:   state->input_sel = data;
1282         state->keyb = 0;
1283         break;
12601284
1261      case 1:   break;
1285   case 1:   break;
12621286   }
12631287
12641288}
12651289
12661290static WRITE8_HANDLER( tenkai_ip_w )
12671291{
1268   switch( tenkai_ipsel )
1292   dynax_state *state = (dynax_state *)space->machine->driver_data;
1293
1294   switch (state->input_sel)
12691295   {
1270      case 0x0c:
1271         coin_counter_w(space->machine, 0, data & 0x01);
1272         coin_counter_w(space->machine, 1, data & 0x02);
1273         // bit 2?
1274         // bit 3?
1275//          popmessage("%02x",data);
1276         return;
1296   case 0x0c:
1297      coin_counter_w(space->machine, 0, data & 0x01);
1298      coin_counter_w(space->machine, 1, data & 0x02);
1299      // bit 2?
1300      // bit 3?
1301//          popmessage("%02x", data);
1302      return;
12771303
1278      case 0x0d:
1279         if (data != 0xff)
1280            break;
1281         return;
1304   case 0x0d:
1305      if (data != 0xff)
1306         break;
1307      return;
12821308   }
1283   logerror("%04x: unmapped ip_sel=%02x written with %02x\n", cpu_get_pc(space->cpu), tenkai_ipsel,data);
1309   logerror("%04x: unmapped ip_sel=%02x written with %02x\n", cpu_get_pc(space->cpu), state->input_sel, data);
12841310}
12851311
12861312static READ8_HANDLER( tenkai_ip_r )
12871313{
1314   dynax_state *state = (dynax_state *)space->machine->driver_data;
12881315   static const char *const keynames0[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4" };
12891316   //static const char *const keynames1[] = { "KEY5", "KEY6", "KEY7", "KEY8", "KEY9" };
12901317
r7640r7641
12921319   {
12931320      case 0:
12941321      {
1295         switch( tenkai_ipsel )
1322         switch (state->input_sel)
12961323         {
12971324            case 0x00:
12981325               return input_port_read(space->machine, "COINS");   // coins
12991326
13001327            default:
1301               logerror("%04x: unmapped ip_sel=%02x read from offs %x\n", cpu_get_pc(space->cpu), tenkai_ipsel, offset);
1328               logerror("%04x: unmapped ip_sel=%02x read from offs %x\n", cpu_get_pc(space->cpu), state->input_sel, offset);
13021329               return 0xff;
13031330         }
13041331      }
13051332
13061333      case 1:
13071334      {
1308         switch( tenkai_ipsel )
1335         switch (state->input_sel)
13091336         {
13101337            case 0x0d:
13111338               return 0xff;
13121339
13131340            // player 2
13141341            case 0x81:
1315               if (tenkai_ip >= 5)
1316                  logerror("%04x: unmapped tenkai_ip=%02x read\n", cpu_get_pc(space->cpu), tenkai_ip);
1317               return 0xff;//input_port_read(space->machine, keynames1[tenkai_ip++]);
1342               if (state->keyb >= 5)
1343                  logerror("%04x: unmapped keyb=%02x read\n", cpu_get_pc(space->cpu), state->keyb);
1344               return 0xff;//input_port_read(space->machine, keynames1[state->keyb++]);
13181345
13191346            // player 1
13201347            case 0x82:
1321               if (tenkai_ip >= 5)
1322                  logerror("%04x: unmapped tenkai_ip=%02x read\n", cpu_get_pc(space->cpu), tenkai_ip);
1323               return input_port_read(space->machine, keynames0[tenkai_ip++]);
1348               if (state->keyb >= 5)
1349                  logerror("%04x: unmapped keyb=%02x read\n", cpu_get_pc(space->cpu), state->keyb);
1350               return input_port_read(space->machine, keynames0[state->keyb++]);
13241351
13251352            default:
1326               logerror("%04x: unmapped ip_sel=%02x read from offs %x\n", cpu_get_pc(space->cpu), tenkai_ipsel, offset);
1353               logerror("%04x: unmapped ip_sel=%02x read from offs %x\n", cpu_get_pc(space->cpu), state->input_sel, offset);
13271354               return 0xff;
13281355         }
13291356      }
r7640r7641
13341361
13351362static WRITE8_DEVICE_HANDLER( tenkai_dswsel_w )
13361363{
1337   tenkai_dswsel = data;
1364   dynax_state *state = (dynax_state *)device->machine->driver_data;
1365   state->dsw_sel = data;
13381366}
1367
13391368static READ8_DEVICE_HANDLER( tenkai_dsw_r )
13401369{
1341   if (~tenkai_dswsel & 0x01) return input_port_read(device->machine, "DSW0");
1342   if (~tenkai_dswsel & 0x02) return input_port_read(device->machine, "DSW1");
1343   if (~tenkai_dswsel & 0x04) return input_port_read(device->machine, "DSW2");
1344   if (~tenkai_dswsel & 0x08) return input_port_read(device->machine, "DSW3");
1345   if (~tenkai_dswsel & 0x10) return input_port_read(device->machine, "DSW4");
1346   logerror("%s: unmapped dsw %02x read\n",cpuexec_describe_context(device->machine),tenkai_dswsel);
1370   dynax_state *state = (dynax_state *)device->machine->driver_data;
1371
1372   if (!BIT(state->dsw_sel, 0)) return input_port_read(device->machine, "DSW0");
1373   if (!BIT(state->dsw_sel, 1)) return input_port_read(device->machine, "DSW1");
1374   if (!BIT(state->dsw_sel, 2)) return input_port_read(device->machine, "DSW2");
1375   if (!BIT(state->dsw_sel, 3)) return input_port_read(device->machine, "DSW3");
1376   if (!BIT(state->dsw_sel, 4)) return input_port_read(device->machine, "DSW4");
1377   logerror("%s: unmapped dsw %02x read\n", cpuexec_describe_context(device->machine), state->dsw_sel);
1378
13471379   return 0xff;
13481380}
13491381
13501382static READ8_HANDLER( tenkai_palette_r )
13511383{
1352   return palette_ram[ 512*palbank + offset ];
1384   dynax_state *state = (dynax_state *)space->machine->driver_data;
1385   return state->palette_ram[512 * state->palbank + offset];
13531386}
13541387
13551388static WRITE8_HANDLER( tenkai_palette_w )
13561389{
1357   int addr = 512*palbank + offset;
1358   palette_ram[addr] = data;
1390   dynax_state *state = (dynax_state *)space->machine->driver_data;
1391   int addr = 512 * state->palbank + offset;
1392   state->palette_ram[addr] = data;
1393
13591394   {
1360      int br = palette_ram[addr & ~0x10];      // bbbrrrrr
1361      int bg = palette_ram[addr | 0x10];      // bb0ggggg
1395      int br = state->palette_ram[addr & ~0x10];      // bbbrrrrr
1396      int bg = state->palette_ram[addr | 0x10];      // bb0ggggg
13621397      int r = br & 0x1f;
13631398      int g = bg & 0x1f;
1364      int b = ((bg & 0xc0)>>3) | ((br & 0xe0)>>5);
1365      palette_set_color_rgb(space->machine, 256*palbank + ((offset&0xf)|((offset&0x1e0)>>1)) ,pal5bit(r),pal5bit(g),pal5bit(b));
1399      int b = ((bg & 0xc0) >> 3) | ((br & 0xe0) >> 5);
1400      palette_set_color_rgb(space->machine, 256 * state->palbank + ((offset & 0xf) | ((offset & 0x1e0) >> 1)), pal5bit(r), pal5bit(g), pal5bit(b));
13661401   }
13671402}
13681403
1369static void tenkai_update_rombank(running_machine *machine)
1404static void tenkai_update_rombank( running_machine *machine )
13701405{
1371   romptr = memory_region(machine, "maincpu") + 0x10000 + 0x8000 * rombank;
1372//  logerror("rombank = %02x\n",rombank);
1406   dynax_state *state = (dynax_state *)machine->driver_data;
1407   state->romptr = memory_region(machine, "maincpu") + 0x10000 + 0x8000 * state->rombank;
1408//  logerror("rombank = %02x\n", state->rombank);
13731409}
13741410
13751411static READ8_HANDLER( tenkai_p3_r )
13761412{
13771413   return 0x00;
13781414}
1415
13791416static WRITE8_HANDLER( tenkai_p3_w )
13801417{
1381   rombank = ((data & 0x04) << 1) | (rombank & 0x07);
1418   dynax_state *state = (dynax_state *)space->machine->driver_data;
1419   state->rombank = ((data & 0x04) << 1) | (state->rombank & 0x07);
13821420   tenkai_update_rombank(space->machine);
13831421}
13841422static WRITE8_HANDLER( tenkai_p4_w )
13851423{
1386   rombank = (rombank & 0x08) | ((data & 0x0e) >> 1);
1424   dynax_state *state = (dynax_state *)space->machine->driver_data;
1425   state->rombank = (state->rombank & 0x08) | ((data & 0x0e) >> 1);
13871426   tenkai_update_rombank(space->machine);
13881427}
1389// Added by Whistler - START
1428
13901429static READ8_HANDLER( tenkai_p5_r )
13911430{
1392   return tenkai_p5_val;
1431   dynax_state *state = (dynax_state *)space->machine->driver_data;
1432   return state->tenkai_p5_val;
13931433}
1434
13941435static WRITE8_HANDLER( tenkai_p6_w )
13951436{
1396   tenkai_p5_val &= 0x0f;
1437   dynax_state *state = (dynax_state *)space->machine->driver_data;
1438   state->tenkai_p5_val &= 0x0f;
1439
13971440   if (data & 0x0f)
1398   {
1399      tenkai_p5_val |= (1 << 4);
1400   }
1441      state->tenkai_p5_val |= (1 << 4);
14011442}
1443
14021444static WRITE8_HANDLER( tenkai_p7_w )
14031445{
1404   tenkai_p5_val &= 0xf0;
1446   dynax_state *state = (dynax_state *)space->machine->driver_data;
1447   state->tenkai_p5_val &= 0xf0;
1448
14051449   if (data & 0x03)
1406   {
1407      tenkai_p5_val |= (1 << 3);
1408   }
1450      state->tenkai_p5_val |= (1 << 3);
14091451}
1410// Added by Whistler - END
1452
14111453static WRITE8_HANDLER( tenkai_p8_w )
14121454{
1413   rombank = ((data & 0x08) <<    1) | (rombank & 0x0f);
1455   dynax_state *state = (dynax_state *)space->machine->driver_data;
1456   state->rombank = ((data & 0x08) << 1) | (state->rombank & 0x0f);
14141457   tenkai_update_rombank(space->machine);
14151458}
1459
14161460static READ8_HANDLER( tenkai_p8_r )
14171461{
14181462   return 0x00;
r7640r7641
14201464
14211465static READ8_HANDLER( tenkai_8000_r )
14221466{
1423   if (rombank < 0x10)
1424   {
1425      return romptr[offset];
1426   }
1427   else if ( (rombank == 0x10) && (offset < 0x10) )
1428   {
1429      running_device *rtc = devtag_get_device(space->machine, "rtc");
1430      return msm6242_r(rtc, offset);
1431   }
1432   else if (rombank == 0x12)
1433   {
1434      return tenkai_palette_r(space,offset);
1435   }
1467   dynax_state *state = (dynax_state *)space->machine->driver_data;
14361468
1437   logerror("%04x: unmapped offset %04X read with rombank=%02X\n",cpu_get_pc(space->cpu),offset,rombank);
1469   if (state->rombank < 0x10)
1470      return state->romptr[offset];
1471   else if ((state->rombank == 0x10) && (offset < 0x10))
1472      return msm6242_r(state->rtc, offset);
1473   else if (state->rombank == 0x12)
1474      return tenkai_palette_r(space, offset);
1475
1476   logerror("%04x: unmapped offset %04X read with rombank=%02X\n", cpu_get_pc(space->cpu), offset, state->rombank);
14381477   return 0x00;
14391478}
14401479
14411480static WRITE8_HANDLER( tenkai_8000_w )
14421481{
1443   if ( (rombank == 0x10) && (offset < 0x10) )
1482   dynax_state *state = (dynax_state *)space->machine->driver_data;
1483
1484   if ((state->rombank == 0x10) && (offset < 0x10))
14441485   {
1445      running_device *rtc = devtag_get_device(space->machine, "rtc");
1446      msm6242_w(rtc, offset, data);
1486      msm6242_w(state->rtc, offset, data);
14471487      return;
14481488   }
1449   else if (rombank == 0x12)
1489   else if (state->rombank == 0x12)
14501490   {
1451      tenkai_palette_w(space,offset,data);
1491      tenkai_palette_w(space, offset, data);
14521492      return;
14531493   }
14541494
1455   logerror("%04x: unmapped offset %04X=%02X written with rombank=%02X\n",cpu_get_pc(space->cpu),offset,data,rombank);
1495   logerror("%04x: unmapped offset %04X=%02X written with rombank=%02X\n", cpu_get_pc(space->cpu), offset, data, state->rombank);
14561496}
14571497
1458static int tenkai_6c, tenkai_70;
1459static void tenkai_show_6c(void)
1498static void tenkai_show_6c( running_machine *machine )
14601499{
1461//  popmessage("%02x %02x",tenkai_6c,tenkai_70);
1500//    dynax_state *state = (dynax_state *)machine->driver_data;
1501//    popmessage("%02x %02x", state->tenkai_6c, state->tenkai_70);
14621502}
1503
14631504static WRITE8_HANDLER( tenkai_6c_w )
14641505{
1465   tenkai_6c = data;
1466   tenkai_show_6c();
1506   dynax_state *state = (dynax_state *)space->machine->driver_data;
1507   state->tenkai_6c = data;
1508   tenkai_show_6c(space->machine);
14671509}
1510
14681511static WRITE8_HANDLER( tenkai_70_w )
14691512{
1470   tenkai_70 = data;
1471   tenkai_show_6c();
1513   dynax_state *state = (dynax_state *)space->machine->driver_data;
1514   state->tenkai_70 = data;
1515   tenkai_show_6c(space->machine);
14721516}
14731517
14741518static WRITE8_HANDLER( tenkai_blit_romregion_w )
14751519{
1476   switch(data)
1520   switch (data)
14771521   {
1478      case 0x00:   dynax_blit_romregion_w(space,0,0);   return;
1479      case 0x83:   dynax_blit_romregion_w(space,0,1);   return;
1480      case 0x80:   dynax_blit_romregion_w(space,0,2);   return;
1522      case 0x00:   dynax_blit_romregion_w(space, 0, 0);   return;
1523      case 0x83:   dynax_blit_romregion_w(space, 0, 1);   return;
1524      case 0x80:   dynax_blit_romregion_w(space, 0, 2);   return;
14811525   }
1482   logerror("%04x: unmapped romregion=%02X\n",cpu_get_pc(space->cpu),data);
1526   logerror("%04x: unmapped romregion=%02X\n", cpu_get_pc(space->cpu), data);
14831527}
14841528
14851529static ADDRESS_MAP_START( tenkai_map, ADDRESS_SPACE_PROGRAM, 8 )
14861530   AM_RANGE(  0x0000,  0x5fff ) AM_ROM
14871531   AM_RANGE(  0x6000,  0x6fff ) AM_RAM
14881532   AM_RANGE(  0x7000,  0x7fff ) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
1489   AM_RANGE(  0x8000,  0xffff ) AM_READWRITE( tenkai_8000_r, tenkai_8000_w )
1490   AM_RANGE( 0x10000, 0x10000 ) AM_DEVREAD ( "aysnd", ay8910_r         )   // AY8910
1491   AM_RANGE( 0x10008, 0x10008 ) AM_DEVWRITE( "aysnd", ay8910_data_w   )   //
1492   AM_RANGE( 0x10010, 0x10010 ) AM_DEVWRITE( "aysnd", ay8910_address_w   )   //
1493   AM_RANGE( 0x10020, 0x10021 ) AM_DEVWRITE("ymsnd", ym2413_w   )   //
1494   AM_RANGE( 0x10040, 0x10040 ) AM_WRITE( dynax_blit_pen_w         )   // Destination Pen
1495   AM_RANGE( 0x10044, 0x10044 ) AM_WRITE( tenkai_blit_dest_w      )   // Destination Layer
1496   AM_RANGE( 0x10048, 0x10048 ) AM_WRITE( tenkai_blit_palette23_w   )   // Layers Palettes
1497   AM_RANGE( 0x1004c, 0x1004c ) AM_WRITE( tenkai_blit_palette01_w   )   //
1498   AM_RANGE( 0x10050, 0x10050 ) AM_WRITE( tenkai_priority_w      )   // layer priority and enable
1499   AM_RANGE( 0x10054, 0x10054 ) AM_WRITE( dynax_blit_backpen_w      )   // Background Color
1500   AM_RANGE( 0x10058, 0x10058 ) AM_WRITE( tenkai_blit_romregion_w   )   // Blitter ROM bank
1501   AM_RANGE( 0x10060, 0x10060 ) AM_WRITE( yarunara_flipscreen_inv_w)   // Flip Screen
1502   AM_RANGE( 0x10064, 0x10064 ) AM_WRITE( yarunara_layer_half_w   )   // half of the interleaved layer to write to
1503   AM_RANGE( 0x10068, 0x10068 ) AM_WRITE( yarunara_layer_half2_w   )   //
1504   AM_RANGE( 0x1006c, 0x1006c ) AM_WRITE( tenkai_6c_w            )   // ?
1505   AM_RANGE( 0x10070, 0x10070 ) AM_WRITE( tenkai_70_w            )   // ?
1533   AM_RANGE(  0x8000,  0xffff ) AM_READWRITE(tenkai_8000_r, tenkai_8000_w)
1534   AM_RANGE( 0x10000, 0x10000 ) AM_DEVREAD("aysnd", ay8910_r)      // AY8910
1535   AM_RANGE( 0x10008, 0x10008 ) AM_DEVWRITE("aysnd", ay8910_data_w)   //
1536   AM_RANGE( 0x10010, 0x10010 ) AM_DEVWRITE("aysnd", ay8910_address_w)   //
1537   AM_RANGE( 0x10020, 0x10021 ) AM_DEVWRITE("ymsnd", ym2413_w)      //
1538   AM_RANGE( 0x10040, 0x10040 ) AM_WRITE(dynax_blit_pen_w)      // Destination Pen
1539   AM_RANGE( 0x10044, 0x10044 ) AM_WRITE(tenkai_blit_dest_w)      // Destination Layer
1540   AM_RANGE( 0x10048, 0x10048 ) AM_WRITE(tenkai_blit_palette23_w)   // Layers Palettes
1541   AM_RANGE( 0x1004c, 0x1004c ) AM_WRITE(tenkai_blit_palette01_w)   //
1542   AM_RANGE( 0x10050, 0x10050 ) AM_WRITE(tenkai_priority_w)      // layer priority and enable
1543   AM_RANGE( 0x10054, 0x10054 ) AM_WRITE(dynax_blit_backpen_w)      // Background Color
1544   AM_RANGE( 0x10058, 0x10058 ) AM_WRITE(tenkai_blit_romregion_w)   // Blitter ROM bank
1545   AM_RANGE( 0x10060, 0x10060 ) AM_WRITE(yarunara_flipscreen_inv_w)   // Flip Screen
1546   AM_RANGE( 0x10064, 0x10064 ) AM_WRITE(yarunara_layer_half_w)   // half of the interleaved layer to write to
1547   AM_RANGE( 0x10068, 0x10068 ) AM_WRITE(yarunara_layer_half2_w)   //
1548   AM_RANGE( 0x1006c, 0x1006c ) AM_WRITE(tenkai_6c_w)         // ?
1549   AM_RANGE( 0x10070, 0x10070 ) AM_WRITE(tenkai_70_w)         // ?
15061550   AM_RANGE( 0x1007c, 0x1007c ) AM_WRITENOP   // IRQ Ack? (0,2)
1507   AM_RANGE( 0x100c0, 0x100c0 ) AM_WRITE( tenkai_ipsel_w         )
1508   AM_RANGE( 0x100c1, 0x100c1 ) AM_WRITE( tenkai_ip_w            )
1509   AM_RANGE( 0x100c2, 0x100c3 ) AM_READ ( tenkai_ip_r            )
1510   AM_RANGE( 0x100e1, 0x100e7 ) AM_WRITE( tenkai_blitter_rev2_w   )   // Blitter (inverted scroll values)
1551   AM_RANGE( 0x100c0, 0x100c0 ) AM_WRITE(tenkai_ipsel_w)
1552   AM_RANGE( 0x100c1, 0x100c1 ) AM_WRITE(tenkai_ip_w)
1553   AM_RANGE( 0x100c2, 0x100c3 ) AM_READ(tenkai_ip_r)
1554   AM_RANGE( 0x100e1, 0x100e7 ) AM_WRITE(tenkai_blitter_rev2_w)   // Blitter (inverted scroll values)
15111555ADDRESS_MAP_END
15121556
15131557static ADDRESS_MAP_START( tenkai_io_map, ADDRESS_SPACE_IO, 8 )
1514   AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE( tenkai_p3_r , tenkai_p3_w )
1515   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE( tenkai_p4_w )
1516   AM_RANGE( T90_P5, T90_P5 ) AM_READ( tenkai_p5_r )
1517   AM_RANGE( T90_P6, T90_P6 ) AM_WRITE( tenkai_p6_w )
1518   AM_RANGE( T90_P7, T90_P7 ) AM_WRITE( tenkai_p7_w )
1519   AM_RANGE( T90_P8, T90_P8 ) AM_READWRITE( tenkai_p8_r, tenkai_p8_w )
1558   AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE(tenkai_p3_r, tenkai_p3_w)
1559   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE(tenkai_p4_w)
1560   AM_RANGE( T90_P5, T90_P5 ) AM_READ(tenkai_p5_r)
1561   AM_RANGE( T90_P6, T90_P6 ) AM_WRITE(tenkai_p6_w)
1562   AM_RANGE( T90_P7, T90_P7 ) AM_WRITE(tenkai_p7_w)
1563   AM_RANGE( T90_P8, T90_P8 ) AM_READWRITE(tenkai_p8_r, tenkai_p8_w)
15201564ADDRESS_MAP_END
15211565
15221566/***************************************************************************
r7640r7641
15251569
15261570static READ8_HANDLER( gekisha_keyboard_0_r )
15271571{
1572   dynax_state *state = (dynax_state *)space->machine->driver_data;
15281573   int res = 0x3f;
15291574
1530   if (~keyb & 0x01) res &= input_port_read(space->machine, "KEY0");
1531   if (~keyb & 0x02) res &= input_port_read(space->machine, "KEY1");
1532   if (~keyb & 0x04) res &= input_port_read(space->machine, "KEY2");
1533   if (~keyb & 0x08) res &= input_port_read(space->machine, "KEY3");
1534   if (~keyb & 0x10) res &= input_port_read(space->machine, "KEY4");
1575   if (!BIT(state->keyb, 0)) res &= input_port_read(space->machine, "KEY0");
1576   if (!BIT(state->keyb, 1)) res &= input_port_read(space->machine, "KEY1");
1577   if (!BIT(state->keyb, 2)) res &= input_port_read(space->machine, "KEY2");
1578   if (!BIT(state->keyb, 3)) res &= input_port_read(space->machine, "KEY3");
1579   if (!BIT(state->keyb, 4)) res &= input_port_read(space->machine, "KEY4");
15351580
15361581   return res;
15371582}
15381583static READ8_HANDLER( gekisha_keyboard_1_r )
15391584{
1585   dynax_state *state = (dynax_state *)space->machine->driver_data;
15401586   int res = 0x3f;
15411587
1542   if (~keyb & 0x01) res &= input_port_read(space->machine, "KEY5");
1543   if (~keyb & 0x02) res &= input_port_read(space->machine, "KEY6");
1544   if (~keyb & 0x04) res &= input_port_read(space->machine, "KEY7");
1545   if (~keyb & 0x08) res &= input_port_read(space->machine, "KEY8");
1546   if (~keyb & 0x10) res &= input_port_read(space->machine, "KEY9");
1588   if (!BIT(state->keyb, 0)) res &= input_port_read(space->machine, "KEY5");
1589   if (!BIT(state->keyb, 1)) res &= input_port_read(space->machine, "KEY6");
1590   if (!BIT(state->keyb, 2)) res &= input_port_read(space->machine, "KEY7");
1591   if (!BIT(state->keyb, 3)) res &= input_port_read(space->machine, "KEY8");
1592   if (!BIT(state->keyb, 4)) res &= input_port_read(space->machine, "KEY9");
15471593
15481594   // bit 6
15491595   res |= input_port_read(space->machine, "BET");
r7640r7641
15551601
15561602static WRITE8_HANDLER( gekisha_hopper_w )
15571603{
1558   static UINT8 val[2];
1559   val[offset] = data;
1560//  popmessage("%02x %02x",val[0],val[1]);
1604   dynax_state *state = (dynax_state *)space->machine->driver_data;
1605   state->gekisha_val[offset] = data;
1606//  popmessage("%02x %02x", gekisha_val[0], gekisha_val[1]);
15611607}
15621608
1563
1564static UINT8 gekisha_rom_enable;
1565static UINT8 *gekisha_rom;
1566static void gekisha_set_rombank(running_machine *machine, UINT8 data)
1609static void gekisha_set_rombank( running_machine *machine, UINT8 data )
15671610{
1568   rombank = data;
1569   gekisha_rom = memory_region(machine, "maincpu") + 0x8000 + rombank * 0x8000;
1611   dynax_state *state = (dynax_state *)machine->driver_data;
1612   state->rombank = data;
1613   state->romptr = memory_region(machine, "maincpu") + 0x8000 + state->rombank * 0x8000;
15701614}
15711615
15721616static WRITE8_HANDLER( gekisha_p4_w )
15731617{
1574   gekisha_rom_enable = !(data & 0x08);
1575   gekisha_set_rombank(space->machine, (data & 0x04) >> 2);
1618   dynax_state *state = (dynax_state *)space->machine->driver_data;
1619   state->gekisha_rom_enable = !BIT(data, 3);
1620   gekisha_set_rombank(space->machine, BIT(data, 2));
15761621}
15771622
15781623static READ8_HANDLER( gekisha_8000_r )
15791624{
1580   if (gekisha_rom_enable)
1581      return gekisha_rom[offset];
1625   dynax_state *state = (dynax_state *)space->machine->driver_data;
15821626
1627   if (state->gekisha_rom_enable)
1628      return state->romptr[offset];
1629
15831630   switch (offset + 0x8000)
15841631   {
1585      case 0x8061:   return input_port_read(space->machine, "COINS" );
1632      case 0x8061:   return input_port_read(space->machine, "COINS");
15861633      case 0x8062:   return gekisha_keyboard_1_r(space, 0);
15871634      case 0x8063:   return gekisha_keyboard_0_r(space, 0);
1588      case 0x8064:   return input_port_read(space->machine, "DSW1" );
1589      case 0x8065:   return input_port_read(space->machine, "DSW3" );
1590      case 0x8066:   return input_port_read(space->machine, "DSW4" );
1591      case 0x8067:   return input_port_read(space->machine, "DSW2" );
1635      case 0x8064:   return input_port_read(space->machine, "DSW1");
1636      case 0x8065:   return input_port_read(space->machine, "DSW3");
1637      case 0x8066:   return input_port_read(space->machine, "DSW4");
1638      case 0x8067:   return input_port_read(space->machine, "DSW2");
15921639   }
15931640
1594   logerror("%04x: unmapped offset %04X read with rombank=%02X\n",cpu_get_pc(space->cpu),offset,rombank);
1641   logerror("%04x: unmapped offset %04X read with rombank=%02X\n",cpu_get_pc(space->cpu), offset, state->rombank);
15951642   return 0x00;
15961643}
15971644
15981645static WRITE8_HANDLER( gekisha_8000_w )
15991646{
1600   if (!gekisha_rom_enable)
1647   dynax_state *state = (dynax_state *)space->machine->driver_data;
1648
1649   if (!state->gekisha_rom_enable)
16011650   {
16021651      switch (offset + 0x8000)
16031652      {
r7640r7641
16361685         case 0x8050:   // CRT controller
16371686         case 0x8051:   return;
16381687
1639         case 0x8070:   ym2413_register_port_w(devtag_get_device(space->machine, "ymsnd"), 0, data);   return;
1640         case 0x8071:   ym2413_data_port_w    (devtag_get_device(space->machine, "ymsnd"), 0, data);   return;
1688         case 0x8070:   ym2413_register_port_w(state->ymsnd, 0, data);   return;
1689         case 0x8071:   ym2413_data_port_w(state->ymsnd, 0, data);   return;
16411690
1642         case 0x8060:   keyb = data;   return;
1691         case 0x8060:   state->keyb = data;   return;
16431692
16441693//          case 0x8080:    // ? 0,1,6 (bit 0 = screen disable?)
16451694//              popmessage("80 = %02x", data);
16461695//              break;
16471696      }
16481697   }
1649   logerror("%04x: unmapped offset %04X=%02X written with rombank=%02X\n",cpu_get_pc(space->cpu),offset,data,rombank);
1698   logerror("%04x: unmapped offset %04X=%02X written with rombank=%02X\n", cpu_get_pc(space->cpu), offset, data, state->rombank);
16501699}
16511700
16521701
16531702static ADDRESS_MAP_START( gekisha_map, ADDRESS_SPACE_PROGRAM, 8 )
16541703   AM_RANGE(  0x0000,  0x6fff ) AM_ROM
16551704   AM_RANGE(  0x7000,  0x7fff ) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
1656   AM_RANGE(  0x8000,  0xffff ) AM_READWRITE( gekisha_8000_r, gekisha_8000_w )
1705   AM_RANGE(  0x8000,  0xffff ) AM_READWRITE(gekisha_8000_r, gekisha_8000_w)
16571706ADDRESS_MAP_END
16581707
16591708static ADDRESS_MAP_START( gekisha_io_map, ADDRESS_SPACE_IO, 8 )
1660   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE( gekisha_p4_w )
1709   AM_RANGE( T90_P4, T90_P4 ) AM_WRITE(gekisha_p4_w)
16611710ADDRESS_MAP_END
16621711
16631712
r7640r7641
16701719***************************************************************************/
16711720
16721721static INPUT_PORTS_START( MAHJONG_KEYS )
1673   /* Keyboard 1 */
16741722   PORT_START("KEY0")
1675   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A      )   PORT_PLAYER(1)
1676   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E      )   PORT_PLAYER(1)
1677   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I      )   PORT_PLAYER(1)
1678   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M      )   PORT_PLAYER(1)
1679   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN      )   PORT_PLAYER(1)
1680   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1         )
1723   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(1)
1724   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(1)
1725   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(1)
1726   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(1)
1727   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(1)
1728   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
16811729
16821730   PORT_START("KEY1")
1683   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B      )   PORT_PLAYER(1)
1684   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F      )   PORT_PLAYER(1)
1685   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J      )   PORT_PLAYER(1)
1686   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N      )   PORT_PLAYER(1)
1687   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH   )   PORT_PLAYER(1)
1688   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1731   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(1)
1732   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(1)
1733   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(1)
1734   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(1)
1735   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(1)
1736   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
16891737
16901738   PORT_START("KEY2")
1691   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C      )   PORT_PLAYER(1)
1692   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G      )   PORT_PLAYER(1)
1693   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K      )   PORT_PLAYER(1)
1694   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI      )   PORT_PLAYER(1)
1695   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON      )   PORT_PLAYER(1)
1696   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1739   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(1)
1740   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(1)
1741   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(1)
1742   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(1)
1743   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(1)
1744   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
16971745
16981746   PORT_START("KEY3")
1699   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D      )   PORT_PLAYER(1)
1700   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H      )   PORT_PLAYER(1)
1701   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L      )   PORT_PLAYER(1)
1702   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON      )   PORT_PLAYER(1)
1703   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1704   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1747   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(1)
1748   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(1)
1749   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(1)
1750   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(1)
1751   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1752   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17051753
17061754   PORT_START("KEY4")
1707   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE   )   PORT_PLAYER(1)   // "l"
1708   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1709   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1710   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP   )   PORT_PLAYER(1)   // "f"
1711   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1712   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1755   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(1)   // "l"
1756   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1757   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1758   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(1)   // "f"
1759   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1760   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17131761
1714   /* Keyboard 2 */
17151762   PORT_START("KEY5")
1716   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A      )   PORT_PLAYER(2)
1717   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E      )   PORT_PLAYER(2)
1718   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I      )   PORT_PLAYER(2)
1719   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M      )   PORT_PLAYER(2)
1720   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN      )   PORT_PLAYER(2)
1721   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2         )
1763   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
1764   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
1765   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
1766   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
1767   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
1768   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
17221769
17231770   PORT_START("KEY6")
1724   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B      )   PORT_PLAYER(2)
1725   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F      )   PORT_PLAYER(2)
1726   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J      )   PORT_PLAYER(2)
1727   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N      )   PORT_PLAYER(2)
1728   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH   )   PORT_PLAYER(2)
1729   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1771   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
1772   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
1773   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
1774   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
1775   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
1776   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17301777
17311778   PORT_START("KEY7")
1732   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C      )   PORT_PLAYER(2)
1733   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G      )   PORT_PLAYER(2)
1734   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K      )   PORT_PLAYER(2)
1735   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI      )   PORT_PLAYER(2)
1736   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON      )   PORT_PLAYER(2)
1737   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1779   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
1780   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
1781   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
1782   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
1783   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
1784   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17381785
17391786   PORT_START("KEY8")
1740   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D      )   PORT_PLAYER(2)
1741   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H      )   PORT_PLAYER(2)
1742   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L      )   PORT_PLAYER(2)
1743   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON      )   PORT_PLAYER(2)
1744   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1745   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1787   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
1788   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
1789   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
1790   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
1791   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1792   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17461793
17471794   PORT_START("KEY9")
1748   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE   )   PORT_PLAYER(2)   // "l"
1749   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1750   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1751   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP   )   PORT_PLAYER(2)   // "f"
1752   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1753   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN   )
1795   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(2)   // "l"
1796   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1797   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1798   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2)   // "f"
1799   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1800   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17541801INPUT_PORTS_END
17551802
17561803static INPUT_PORTS_START( MAHJONG_KEYS_BET )
1757   /* Keyboard 1 */
17581804   PORT_START("KEY0")
1759   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A      )   PORT_PLAYER(1)
1760   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E      )   PORT_PLAYER(1)
1761   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I      )   PORT_PLAYER(1)
1762   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M      )   PORT_PLAYER(1)
1763   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN      )   PORT_PLAYER(1)
1764   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1         )
1805   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(1)
1806   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(1)
1807   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(1)
1808   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(1)
1809   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(1)
1810   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
17651811
17661812   PORT_START("KEY1")
1767   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B      )   PORT_PLAYER(1)
1768   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F      )   PORT_PLAYER(1)
1769   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J      )   PORT_PLAYER(1)
1770   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N      )   PORT_PLAYER(1)
1771   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH   )   PORT_PLAYER(1)
1772   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET      )   PORT_PLAYER(1)
1813   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(1)
1814   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(1)
1815   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(1)
1816   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(1)
1817   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(1)
1818   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(1)
17731819
17741820   PORT_START("KEY2")
1775   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C      )   PORT_PLAYER(1)
1776   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G      )   PORT_PLAYER(1)
1777   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K      )   PORT_PLAYER(1)
1778   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI      )   PORT_PLAYER(1)
1779   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON      )   PORT_PLAYER(1)
1780   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1821   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(1)
1822   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(1)
1823   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(1)
1824   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(1)
1825   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(1)
1826   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17811827
17821828   PORT_START("KEY3")
1783   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D      )   PORT_PLAYER(1)
1784   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H      )   PORT_PLAYER(1)
1785   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L      )   PORT_PLAYER(1)
1786   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON      )   PORT_PLAYER(1)
1787   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1788   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1829   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(1)
1830   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(1)
1831   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(1)
1832   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(1)
1833   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1834   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
17891835
17901836   PORT_START("KEY4")
1791   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE   )   PORT_PLAYER(1)   // "l"
1792   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE      )   PORT_PLAYER(1)   // "t"
1793   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP   )   PORT_PLAYER(1)   // "w"
1794   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP   )   PORT_PLAYER(1)   // "f"
1795   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG         )   PORT_PLAYER(1)   // "b"
1796   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL      )   PORT_PLAYER(1)   // "s"
1837   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(1)   // "l"
1838   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(1)   // "t"
1839   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(1)   // "w"
1840   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(1)   // "f"
1841   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(1)   // "b"
1842   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(1)   // "s"
17971843
1798   /* Keyboard 2 */
17991844   PORT_START("KEY5")
1800   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A      )   PORT_PLAYER(2)
1801   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E      )   PORT_PLAYER(2)
1802   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I      )   PORT_PLAYER(2)
1803   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M      )   PORT_PLAYER(2)
1804   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN      )   PORT_PLAYER(2)
1805   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2         )
1845   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
1846   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
1847   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
1848   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
1849   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
1850   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
18061851
18071852   PORT_START("KEY6")
1808   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B      )   PORT_PLAYER(2)
1809   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F      )   PORT_PLAYER(2)
1810   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J      )   PORT_PLAYER(2)
1811   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N      )   PORT_PLAYER(2)
1812   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH   )   PORT_PLAYER(2)
1813   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET      )   PORT_PLAYER(2)
1853   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
1854   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
1855   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
1856   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
1857   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
1858   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(2)
18141859
18151860   PORT_START("KEY7")
1816   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C      )   PORT_PLAYER(2)
1817   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G      )   PORT_PLAYER(2)
1818   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K      )   PORT_PLAYER(2)
1819   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI      )   PORT_PLAYER(2)
1820   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON      )   PORT_PLAYER(2)
1821   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1861   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
1862   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
1863   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
1864   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
1865   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
1866   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
18221867
18231868   PORT_START("KEY8")
1824   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D      )   PORT_PLAYER(2)
1825   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H      )   PORT_PLAYER(2)
1826   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L      )   PORT_PLAYER(2)
1827   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON      )   PORT_PLAYER(2)
1828   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1829   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN         )
1869   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
1870   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
1871   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
1872   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
1873   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1874   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
18301875
18311876   PORT_START("KEY9")
1832   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE   )   PORT_PLAYER(2)   // "l"
1833   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE      )   PORT_PLAYER(2)   // "t"
1834   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP   )   PORT_PLAYER(2)   // "w"
1835   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP   )   PORT_PLAYER(2)   // "f"
1836   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG         )   PORT_PLAYER(2)   // "b"
1837   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL      )   PORT_PLAYER(2)   // "s"
1877   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(2)   // "l"
1878   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(2)   // "t"
1879   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(2)   // "w"
1880   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2)   // "f"
1881   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(2)   // "b"
1882   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(2)   // "s"
18381883INPUT_PORTS_END
18391884
18401885static INPUT_PORTS_START( HANAFUDA_KEYS )
1841   /* Keyboard 1 */
18421886   PORT_START("KEY0")
18431887   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_HANAFUDA_A ) PORT_PLAYER(1)
18441888   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_HANAFUDA_E ) PORT_PLAYER(1)
r7640r7641
18791923   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
18801924   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
18811925
1882   /* Keyboard 2 */
18831926   PORT_START("KEY5")
18841927   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_HANAFUDA_A ) PORT_PLAYER(2)
18851928   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_HANAFUDA_E ) PORT_PLAYER(2)
r7640r7641
19221965INPUT_PORTS_END
19231966
19241967static INPUT_PORTS_START( HANAFUDA_KEYS_BET )
1925   /* Keyboard 1 */
19261968   PORT_START("KEY0")
19271969   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_HANAFUDA_A ) PORT_PLAYER(1)
19281970   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_HANAFUDA_E ) PORT_PLAYER(1)
r7640r7641
19632005   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )         // "b"
19642006   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )         // "s"
19652007
1966   /* Keyboard 2 */
19672008   PORT_START("KEY5")
19682009   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_HANAFUDA_A ) PORT_PLAYER(2)
19692010   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_HANAFUDA_E ) PORT_PLAYER(2)
r7640r7641
20062047INPUT_PORTS_END
20072048
20082049static INPUT_PORTS_START( HANAFUDA_KEYS_BET_ALT )
2009   /* Keyboard 1 */
20102050   PORT_START("KEY0")
20112051   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_HANAFUDA_A ) PORT_PLAYER(1)
20122052   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_HANAFUDA_E ) PORT_PLAYER(1)
r7640r7641
20492089   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
20502090   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
20512091
2052   /* Keyboard 2 */
20532092   PORT_START("KEY5")
20542093   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_HANAFUDA_A ) PORT_PLAYER(2)
20552094   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_HANAFUDA_E ) PORT_PLAYER(2)
r7640r7641
21462185   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
21472186
21482187   PORT_START("COINS")
2149   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2150   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2151   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE   ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
2152   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2   )   // Analyzer
2153   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3   )   // Memory Reset
2154   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2155   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1   )
2156   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1   )
2188   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
2189   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
2190   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
2191   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 )   // Analyzer
2192   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 )   // Memory Reset
2193   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
2194   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
2195   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
21572196
21582197   PORT_INCLUDE( HANAFUDA_KEYS )
21592198INPUT_PORTS_END
r7640r7641
22752314   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
22762315
22772316   PORT_START("COINS")
2278   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2279   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2280   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE   ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
2281   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2   )   // Analyzer
2282   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3   )   // Memory Reset
2283   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2284   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1   )
2285   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1   )
2317   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
2318   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
2319   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
2320   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 )   // Analyzer
2321   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 )   // Memory Reset
2322   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
2323   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
2324   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
22862325
22872326   PORT_INCLUDE( HANAFUDA_KEYS )
22882327
2289   PORT_START("DSW2")   /* IN13 */
2328   PORT_START("DSW2")
22902329   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
22912330   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
22922331   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r7640r7641
23122351   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
23132352   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
23142353
2315   PORT_START("DSW3")   /* IN14 */
2354   PORT_START("DSW3")
23162355   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
23172356   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
23182357   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r7640r7641
24412480
24422481   PORT_START("COINS")
24432482   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4)   // Pay
2444   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE4   )   // 18B
2445   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE   ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
2446   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2   )   // Analyzer
2447   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3   )   // Memory Reset
2483   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE4 )   // 18B
2484   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
2485   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 )   // Analyzer
2486   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 )   // Memory Reset
24482487   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2    )   // Key In
2449   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1   )
2450   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1   )   // 18A
2488   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
2489   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )   // 18A
24512490
24522491   PORT_INCLUDE( HANAFUDA_KEYS_BET )
24532492//  PORT_INCLUDE( HANAFUDA_KEYS_BET_ALT )
r7640r7641
28432882   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
28442883
28452884   PORT_START("COINS")
2846   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2847   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2848   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE   ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)   // Test, during boot
2849   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2850   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2851   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2   )
2852   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1   )
2853   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN   )
2885   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
2886   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
2887   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)   // Test, during boot
2888   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
2889   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
2890   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
2891   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
2892   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
28542893
2855   /* Keyboard 1 */
28562894   PORT_START("KEY0")
28572895   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
28582896   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
r7640r7641
28702908   PORT_START("KEY4")
28712909   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNKNOWN )
28722910
2873   /* Keyboard 2 */
28742911   PORT_START("KEY5")
28752912   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
28762913   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
r7640r7641
35783615   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
35793616
35803617   PORT_START("COINS")
3581   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN   )   // 17B
3582   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN   )   // 18B
3583   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE   ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)   // Test
3584   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2   )   // Analyzer
3585   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3   )   // Memory Reset
3586   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN   )   // 06B
3587   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1   )   // Coin
3588   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN   )   // 18A
3618   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )   // 17B
3619   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )   // 18B
3620   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)   // Test
3621   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 )   // Analyzer
3622   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 )   // Memory Reset
3623   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )   // 06B
3624   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )   // Coin
3625   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )   // 18A
35893626
35903627   PORT_INCLUDE( MAHJONG_KEYS )
35913628
r7640r7641
38883925
38893926static INPUT_PORTS_START( htengoku )
38903927   PORT_START("COINS")
3891   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE4   )   // medal out
3892   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN   )
3928   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE4 )   // medal out
3929   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
38933930   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE  ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
3894   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2   )   // analyzer
3895   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3   )   // data clear
3896   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2   )   // note
3897   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1   )
3898   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN   )
3931   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 )   // analyzer
3932   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 )   // data clear
3933   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )   // note
3934   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
3935   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
38993936
39003937   PORT_INCLUDE( HANAFUDA_KEYS_BET )
39013938
r7640r7641
41544191
41554192***************************************************************************/
41564193
4194static MACHINE_START( dynax )
4195{
4196   dynax_state *state = (dynax_state *)machine->driver_data;
4197
4198   state->maincpu = devtag_get_device(machine, "maincpu");
4199   state->soundcpu = devtag_get_device(machine, "soundcpu");
4200   state->rtc = devtag_get_device(machine, "rtc");
4201   state->ymsnd = devtag_get_device(machine, "ymsnd");
4202
4203   state_save_register_global(machine, state->sound_irq);
4204   state_save_register_global(machine, state->vblank_irq);
4205   state_save_register_global(machine, state->blitter_irq);
4206   state_save_register_global(machine, state->blitter2_irq);
4207   state_save_register_global(machine, state->soundlatch_irq);
4208   state_save_register_global(machine, state->sound_vblank_irq);
4209
4210   state_save_register_global(machine, state->input_sel);
4211   state_save_register_global(machine, state->dsw_sel);
4212   state_save_register_global(machine, state->keyb);
4213   state_save_register_global(machine, state->coins);
4214   state_save_register_global(machine, state->hopper);
4215   state_save_register_global(machine, state->hnoridur_bank);
4216   state_save_register_global(machine, state->palbank);
4217   state_save_register_global(machine, state->msm5205next);
4218   state_save_register_global(machine, state->resetkludge);
4219   state_save_register_global(machine, state->toggle);
4220   state_save_register_global(machine, state->toggle_cpu1);
4221   state_save_register_global(machine, state->yarunara_clk_toggle);
4222   state_save_register_global(machine, state->soundlatch_ack);
4223   state_save_register_global(machine, state->soundlatch_full);
4224   state_save_register_global(machine, state->latch);
4225   state_save_register_global(machine, state->rombank);
4226   state_save_register_global(machine, state->tenkai_p5_val);
4227   state_save_register_global(machine, state->tenkai_6c);
4228   state_save_register_global(machine, state->tenkai_70);
4229   state_save_register_global_array(machine, state->gekisha_val);
4230   state_save_register_global_array(machine, state->palette_ram);
4231   state_save_register_global(machine, state->gekisha_rom_enable);
4232}
4233
4234static MACHINE_RESET( dynax )
4235{
4236   dynax_state *state = (dynax_state *)machine->driver_data;
4237
4238   if (devtag_get_device(machine, "msm") != NULL)
4239      MACHINE_RESET_CALL(adpcm);
4240
4241   state->sound_irq = 0;
4242   state->vblank_irq = 0;
4243   state->blitter_irq = 0;
4244   state->blitter2_irq = 0;
4245   state->soundlatch_irq = 0;
4246   state->sound_vblank_irq = 0;
4247
4248   state->input_sel = 0;
4249   state->dsw_sel = 0;
4250   state->keyb = 0;
4251   state->coins = 0;
4252   state->hopper = 0;
4253   state->hnoridur_bank = 0;
4254   state->palbank = 0;
4255   state->msm5205next = 0;
4256   state->resetkludge = 0;
4257   state->toggle = 0;
4258   state->toggle_cpu1 = 0;
4259   state->yarunara_clk_toggle = 0;
4260   state->soundlatch_ack = 0;
4261   state->soundlatch_full = 0;
4262   state->latch = 0;
4263   state->rombank = 0;
4264   state->tenkai_p5_val = 0;
4265   state->tenkai_6c = 0;
4266   state->tenkai_70 = 0;
4267   state->gekisha_val[0] = 0;
4268   state->gekisha_val[1] = 0;
4269   state->gekisha_rom_enable = 0;
4270
4271   memset(state->palette_ram, 0, ARRAY_LENGTH(state->palette_ram));
4272}
4273
4274static MACHINE_START( hanamai )
4275{
4276   UINT8 *ROM = memory_region(machine, "maincpu");
4277   memory_configure_bank(machine, "bank1", 0, 0x10, &ROM[0x8000], 0x8000);
4278
4279   MACHINE_START_CALL(dynax);
4280}
4281
4282static MACHINE_START( hnoridur )
4283{
4284   UINT8 *ROM = memory_region(machine, "maincpu");
4285   int bank_n = (memory_region_length(machine, "maincpu") - 0x10000) / 0x8000;
4286
4287   memory_configure_bank(machine, "bank1", 0, bank_n, &ROM[0x10000], 0x8000);
4288
4289   MACHINE_START_CALL(dynax);
4290}
4291
4292static MACHINE_START( htengoku )
4293{
4294   UINT8 *ROM = memory_region(machine, "maincpu");
4295
4296   memory_configure_bank(machine, "bank1", 0, 8, &ROM[0x10000], 0x8000);
4297
4298   MACHINE_START_CALL(dynax);
4299}
4300
41574301/***************************************************************************
41584302                                Hana no Mai
41594303***************************************************************************/
r7640r7641
41814325
41824326static MACHINE_DRIVER_START( hanamai )
41834327
4328   /* driver data */
4329   MDRV_DRIVER_DATA(dynax_state)
4330
41844331   /* basic machine hardware */
41854332   MDRV_CPU_ADD("maincpu",Z80,22000000 / 4)   /* 5.5MHz */
41864333   MDRV_CPU_PROGRAM_MAP(sprtmtch_mem_map)
41874334   MDRV_CPU_IO_MAP(hanamai_io_map)
41884335   MDRV_CPU_VBLANK_INT("screen", sprtmtch_vblank_interrupt)   /* IM 0 needs an opcode on the data bus */
41894336
4190   MDRV_MACHINE_RESET(adpcm)
4337   MDRV_MACHINE_START(hanamai)
4338   MDRV_MACHINE_RESET(dynax)
41914339
41924340   MDRV_NVRAM_HANDLER(generic_0fill)
41934341
r7640r7641
42384386
42394387static MACHINE_DRIVER_START( hnoridur )
42404388
4389   /* driver data */
4390   MDRV_DRIVER_DATA(dynax_state)
4391
42414392   /* basic machine hardware */
42424393   MDRV_CPU_ADD("maincpu",Z80,22000000 / 4)   /* 5.5MHz */
42434394   MDRV_CPU_PROGRAM_MAP(hnoridur_mem_map)
42444395   MDRV_CPU_IO_MAP(hnoridur_io_map)
42454396   MDRV_CPU_VBLANK_INT("screen", sprtmtch_vblank_interrupt)   /* IM 0 needs an opcode on the data bus */
42464397
4247   MDRV_MACHINE_RESET(adpcm)
4398   MDRV_MACHINE_START(hnoridur)
4399   MDRV_MACHINE_RESET(dynax)
42484400
42494401   MDRV_NVRAM_HANDLER(generic_0fill)
42504402
r7640r7641
42834435
42844436static MACHINE_DRIVER_START( hjingi )
42854437
4438   /* driver data */
4439   MDRV_DRIVER_DATA(dynax_state)
4440
42864441   /* basic machine hardware */
42874442   MDRV_CPU_ADD("maincpu",Z80, XTAL_22MHz / 4)
42884443   MDRV_CPU_PROGRAM_MAP(hjingi_mem_map)
42894444   MDRV_CPU_IO_MAP(hjingi_io_map)
42904445   MDRV_CPU_VBLANK_INT("screen", sprtmtch_vblank_interrupt)   /* IM 0 needs an opcode on the data bus */
42914446
4292   MDRV_MACHINE_RESET(adpcm)
4447   MDRV_MACHINE_START(hnoridur)
4448   MDRV_MACHINE_RESET(dynax)
42934449
42944450   MDRV_NVRAM_HANDLER(generic_0fill)
42954451
r7640r7641
43414497
43424498static MACHINE_DRIVER_START( sprtmtch )
43434499
4500   /* driver data */
4501   MDRV_DRIVER_DATA(dynax_state)
4502
43444503   /* basic machine hardware */
43454504   MDRV_CPU_ADD("maincpu", Z80,22000000 / 4)   /* 5.5MHz */
43464505   MDRV_CPU_PROGRAM_MAP(sprtmtch_mem_map)
43474506   MDRV_CPU_IO_MAP(sprtmtch_io_map)
43484507   MDRV_CPU_VBLANK_INT("screen", sprtmtch_vblank_interrupt)   /* IM 0 needs an opcode on the data bus */
43494508
4509   MDRV_MACHINE_START(hanamai)
4510   MDRV_MACHINE_RESET(dynax)
4511
43504512   MDRV_NVRAM_HANDLER(generic_0fill)
43514513
43524514   /* video hardware */
r7640r7641
43814543
43824544static MACHINE_DRIVER_START( mjfriday )
43834545
4546   /* driver data */
4547   MDRV_DRIVER_DATA(dynax_state)
4548
43844549   /* basic machine hardware */
43854550   MDRV_CPU_ADD("maincpu",Z80,24000000/4)   /* 6 MHz? */
43864551   MDRV_CPU_PROGRAM_MAP(sprtmtch_mem_map)
43874552   MDRV_CPU_IO_MAP(mjfriday_io_map)
43884553   MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
43894554
4555   MDRV_MACHINE_START(hanamai)
4556   MDRV_MACHINE_RESET(dynax)
4557
43904558   MDRV_NVRAM_HANDLER(generic_0fill)
43914559
43924560   /* video hardware */
r7640r7641
44344602
44354603static INTERRUPT_GEN( yarunara_clock_interrupt )
44364604{
4437   static int i=0;
4438   i^=1;
4605   dynax_state *state = (dynax_state *)device->machine->driver_data;
4606   state->yarunara_clk_toggle ^= 1;
44394607
4440   if (i==1)
4441   {
4442      dynax_sound_irq = 0;
4443   }
4608   if (state->yarunara_clk_toggle == 1)
4609      state->sound_irq = 0;
44444610   else
4445   {
4446      dynax_sound_irq = 1;
4447   }
4611      state->sound_irq = 1;
44484612
44494613   sprtmtch_update_irq(device->machine);
44504614}
r7640r7641
45194683   MSM5205_S48_4B      /* 8 KHz, 4 Bits  */
45204684};
45214685
4686static MACHINE_START( jantouki )
4687{
4688   dynax_state *state = (dynax_state *)machine->driver_data;
4689   UINT8 *MAIN = memory_region(machine, "maincpu");
4690   UINT8 *SOUND = memory_region(machine, "soundcpu");
4691
4692   memory_configure_bank(machine, "bank1", 0, 0x10, &MAIN[0x8000],  0x8000);
4693   memory_configure_bank(machine, "bank2", 0, 12,   &SOUND[0x8000], 0x8000);
4694
4695   state->top_scr = devtag_get_device(machine, "top");
4696   state->bot_scr = devtag_get_device(machine, "bottom");
4697
4698   MACHINE_START_CALL(dynax);
4699}
4700
45224701static MACHINE_DRIVER_START( jantouki )
45234702
4703   /* driver data */
4704   MDRV_DRIVER_DATA(dynax_state)
4705
45244706   /* basic machine hardware */
45254707   MDRV_CPU_ADD("maincpu",Z80,22000000 / 4)   /* 5.5MHz */
45264708   MDRV_CPU_PROGRAM_MAP(jantouki_mem_map)
r7640r7641
45324714   MDRV_CPU_IO_MAP(jantouki_sound_io_map)
45334715   MDRV_CPU_VBLANK_INT("top", jantouki_sound_vblank_interrupt)   /* IM 0 needs an opcode on the data bus */
45344716
4535   MDRV_MACHINE_RESET(adpcm)
4717   MDRV_MACHINE_START(jantouki)
4718   MDRV_MACHINE_RESET(dynax)
45364719
45374720   MDRV_NVRAM_HANDLER(generic_0fill)
45384721
r7640r7641
45874770/*  It runs in IM 2, thus needs a vector on the data bus:
45884771    0xfa and 0xfc are very similar, they should be triggered by the blitter
45894772    0xf8 is vblank  */
4590void mjelctrn_update_irq(running_machine *machine)
4773void mjelctrn_update_irq( running_machine *machine )
45914774{
4592   dynax_blitter_irq = 1;
4593   cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, 0xfa);
4775   dynax_state *state = (dynax_state *)machine->driver_data;
4776   state->blitter_irq = 1;
4777   cpu_set_input_line_and_vector(state->maincpu, 0, HOLD_LINE, 0xfa);
45944778}
45954779
45964780static INTERRUPT_GEN( mjelctrn_vblank_interrupt )
45974781{
4782   dynax_state *state = (dynax_state *)device->machine->driver_data;
4783
45984784   // This is a kludge to avoid losing blitter interrupts
45994785   // there should be a vblank ack mechanism
4600   if (!dynax_blitter_irq)
4786   if (!state->blitter_irq)
46014787      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0xf8);
46024788}
46034789
r7640r7641
46214807    0x42 and 0x44 are very similar, they should be triggered by the blitter
46224808    0x40 is vblank
46234809    0x46 is a periodic irq? */
4624void neruton_update_irq(running_machine *machine)
4810void neruton_update_irq( running_machine *machine )
46254811{
4626   dynax_blitter_irq = 1;
4627   cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, 0x42);
4812   dynax_state *state = (dynax_state *)machine->driver_data;
4813   state->blitter_irq = 1;
4814   cpu_set_input_line_and_vector(state->maincpu, 0, HOLD_LINE, 0x42);
46284815}
46294816
46304817static INTERRUPT_GEN( neruton_vblank_interrupt )
46314818{
4819   dynax_state *state = (dynax_state *)device->machine->driver_data;
4820
46324821   // This is a kludge to avoid losing blitter interrupts
46334822   // there should be a vblank ack mechanism
4634   if (dynax_blitter_irq)   return;
4823   if (state->blitter_irq)   return;
46354824
4636   switch(cpu_getiloops(device))
4825   switch (cpu_getiloops(device))
46374826   {
4638      case 0:      cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0x40);   break;
4639      default:   cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0x46);
4827      case 0:  cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0x40);   break;
4828      default: cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0x46);   break;
46404829   }
46414830}
46424831
r7640r7641
46584847    0x40 is vblank  */
46594848static INTERRUPT_GEN( majxtal7_vblank_interrupt )
46604849{
4850   dynax_state *state = (dynax_state *)device->machine->driver_data;
4851
46614852   // This is a kludge to avoid losing blitter interrupts
46624853   // there should be a vblank ack mechanism
4663   if (dynax_blitter_irq)   return;
4854   if (state->blitter_irq)   return;
46644855
46654856   cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0x40);
46664857}
r7640r7641
46894880
46904881static MACHINE_DRIVER_START( htengoku )
46914882
4883   /* driver data */
4884   MDRV_DRIVER_DATA(dynax_state)
4885
46924886   /* basic machine hardware */
46934887   MDRV_CPU_ADD("maincpu",Z80,20000000 / 4)
46944888   MDRV_CPU_PROGRAM_MAP(yarunara_mem_map)
r7640r7641
46964890   MDRV_CPU_VBLANK_INT("screen", sprtmtch_vblank_interrupt)   /* IM 0 needs an opcode on the data bus */
46974891   MDRV_CPU_PERIODIC_INT(yarunara_clock_interrupt, 60)   // RTC
46984892
4893   MDRV_MACHINE_START(htengoku)
4894   MDRV_MACHINE_RESET(dynax)
4895
46994896   MDRV_NVRAM_HANDLER(generic_0fill)
47004897
47014898   /* video hardware */
r7640r7641
47334930
47344931static INTERRUPT_GEN( tenkai_interrupt )
47354932{
4736   switch(cpu_getiloops(device))
4933   switch (cpu_getiloops(device))
47374934   {
4738      case 0:      cpu_set_input_line(device, INPUT_LINE_IRQ0, HOLD_LINE);   break;
4739      case 1:      cpu_set_input_line(device, INPUT_LINE_IRQ1, HOLD_LINE);   break;
4740      case 2:      cpu_set_input_line(device, INPUT_LINE_IRQ2, HOLD_LINE);   break;
4935      case 0: cpu_set_input_line(device, INPUT_LINE_IRQ0, HOLD_LINE);   break;
4936      case 1: cpu_set_input_line(device, INPUT_LINE_IRQ1, HOLD_LINE);   break;
4937      case 2: cpu_set_input_line(device, INPUT_LINE_IRQ2, HOLD_LINE);   break;
47414938   }
47424939}
47434940
r7640r7641
47504947   DEVCB_NULL,                  DEVCB_HANDLER(tenkai_dswsel_w)   // Write
47514948};
47524949
4950static STATE_POSTLOAD( tenkai_bank_postload )
4951{
4952   tenkai_update_rombank(machine);
4953}
4954
4955static MACHINE_START( tenkai )
4956{
4957   MACHINE_START_CALL(dynax);
4958
4959   state_save_register_postload(machine, tenkai_bank_postload, NULL);
4960}
4961
47534962static MACHINE_DRIVER_START( tenkai )
47544963
4964   /* driver data */
4965   MDRV_DRIVER_DATA(dynax_state)
4966
47554967   /* basic machine hardware */
47564968   MDRV_CPU_ADD("maincpu",TMP91640, 21472700 / 2)
47574969   MDRV_CPU_PROGRAM_MAP(tenkai_map)
47584970   MDRV_CPU_IO_MAP(tenkai_io_map)
47594971   MDRV_CPU_VBLANK_INT_HACK(tenkai_interrupt,3)
47604972
4973   MDRV_MACHINE_START(tenkai)
4974   MDRV_MACHINE_RESET(dynax)
4975
47614976   MDRV_NVRAM_HANDLER(generic_0fill)
47624977
47634978   /* video hardware */
r7640r7641
47975012                                Mahjong Gekisha
47985013***************************************************************************/
47995014
5015static STATE_POSTLOAD( gekisha_bank_postload )
5016{
5017   dynax_state *state = (dynax_state *)machine->driver_data;
5018
5019   gekisha_set_rombank(machine, state->rombank);
5020}
5021
5022static MACHINE_START( gekisha )
5023{
5024   MACHINE_START_CALL(dynax);
5025
5026   state_save_register_postload(machine, gekisha_bank_postload, NULL);
5027}
5028
48005029static MACHINE_RESET( gekisha )
48015030{
5031   MACHINE_RESET_CALL(dynax);
5032
48025033   gekisha_set_rombank(machine, 0);
48035034}
48045035
48055036static MACHINE_DRIVER_START( gekisha )
48065037
5038   /* driver data */
5039   MDRV_DRIVER_DATA(dynax_state)
5040
48075041   /* basic machine hardware */
48085042   MDRV_CPU_ADD("maincpu",TMP90841, XTAL_10MHz )   // ?
48095043   MDRV_CPU_PROGRAM_MAP(gekisha_map)
48105044   MDRV_CPU_IO_MAP(gekisha_io_map)
48115045   MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
48125046
5047   MDRV_MACHINE_START(gekisha)
48135048   MDRV_MACHINE_RESET(gekisha)
48145049
48155050   MDRV_NVRAM_HANDLER(generic_0fill)
r7640r7641
51835418   UINT8   *src = (UINT8 *)memory_region(machine, "maincpu");
51845419   int i;
51855420
5186   for (i=0;i<0x90000;i++)
5421   for (i = 0; i < 0x90000; i++)
51875422   {
5188      src[i] = BITSWAP8(src[i],7,6,5,3,4,2,1,0);
5423      src[i] = BITSWAP8(src[i], 7, 6, 5, 3, 4, 2, 1, 0);
51895424
51905425   }
51915426
51925427   src = (UINT8 *)memory_region(machine, "gfx1");
51935428
5194   for (i=0;i<0xc0000;i++)
5429   for (i = 0; i < 0xc0000; i++)
51955430   {
5196      src[i] = BITSWAP8(src[i],7,6,5,3,4,2,1,0);
5431      src[i] = BITSWAP8(src[i], 7, 6, 5, 3, 4, 2, 1, 0);
51975432
51985433   }
51995434}
r7640r7641
52035438   /* Address lines scrambling on 1 z80 rom */
52045439   int i;
52055440   UINT8   *gfx = (UINT8 *)memory_region(machine, "gfx1");
5206   UINT8   *rom = memory_region(machine, "maincpu") + 0x28000,
5207         *end = rom + 0x10000;
5208   for (;rom < end; rom+=8)
5441   UINT8   *rom = memory_region(machine, "maincpu") + 0x28000, *end = rom + 0x10000;
5442   for ( ; rom < end; rom += 8)
52095443   {
52105444      UINT8 temp[8];
52115445      temp[0] = rom[0];   temp[1] = rom[1];   temp[2] = rom[2];   temp[3] = rom[3];
r7640r7641
59256159   size_t  size = memory_region_length(machine, "maincpu");
59266160   UINT8   *rom1 = auto_alloc_array(machine, UINT8, size);
59276161
5928   memcpy(rom1,rom,size);
6162   memcpy(rom1, rom, size);
59296163   for (i = 0; i < size; i++)
59306164      rom[i] = BITSWAP8(rom1[BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8, 1,6,5,4,3,2,7, 0)], 7,6, 1,4,3,2,5,0);
59316165   auto_free(machine, rom1);
r7640r7641
59336167
59346168static DRIVER_INIT( mjelct3a )
59356169{
5936   int i,j;
6170   int i, j;
59376171   UINT8   *rom = memory_region(machine, "maincpu");
59386172   size_t  size = memory_region_length(machine, "maincpu");
59396173   UINT8   *rom1 = auto_alloc_array(machine, UINT8, size);
59406174
5941   memcpy(rom1,rom,size);
6175   memcpy(rom1, rom, size);
59426176   for (i = 0; i < size; i++)
59436177   {
59446178      j = i & ~0x7e00;
r7640r7641
69717205
69727206***************************************************************************/
69737207
6974GAME( 1989, hnkochou, 0,        hanamai,  hnkochou, 0,        ROT180, "Dynax",                    "Hana Kochou (Japan, Bet)",                                     0 )
6975GAME( 1988, hanamai,  hnkochou, hanamai,  hanamai,  0,        ROT180, "Dynax",                    "Hana no Mai (Japan)",                                          0 )
6976GAME( 1990, hjingi,   0,        hjingi,   hjingi,   0,        ROT180, "Dynax",                    "Hana Jingi (Japan, Bet)",                                      0 )
6977GAME( 1989, hnoridur, hjingi,   hnoridur, hnoridur, 0,        ROT180, "Dynax",                    "Hana Oriduru (Japan)",                                         0 )
6978GAME( 1989, drgpunch, 0,        sprtmtch, sprtmtch, 0,        ROT0,   "Dynax",                    "Dragon Punch (Japan)",                                         0 )
6979GAME( 1989, sprtmtch, drgpunch, sprtmtch, sprtmtch, 0,        ROT0,   "Dynax (Fabtek license)",   "Sports Match",                                                 0 )
7208GAME( 1989, hnkochou, 0,        hanamai,  hnkochou, 0,        ROT180, "Dynax",                    "Hana Kochou (Japan, Bet)",                                      GAME_SUPPORTS_SAVE )
7209GAME( 1988, hanamai,  hnkochou, hanamai,  hanamai,  0,        ROT180, "Dynax",                    "Hana no Mai (Japan)",                                           GAME_SUPPORTS_SAVE )
7210GAME( 1990, hjingi,   0,        hjingi,   hjingi,   0,        ROT180, "Dynax",                    "Hana Jingi (Japan, Bet)",                                       GAME_SUPPORTS_SAVE )
7211GAME( 1989, hnoridur, hjingi,   hnoridur, hnoridur, 0,        ROT180, "Dynax",                    "Hana Oriduru (Japan)",                                          GAME_SUPPORTS_SAVE )
7212GAME( 1989, drgpunch, 0,        sprtmtch, sprtmtch, 0,        ROT0,   "Dynax",                    "Dragon Punch (Japan)",                                          GAME_SUPPORTS_SAVE )
7213GAME( 1989, sprtmtch, drgpunch, sprtmtch, sprtmtch, 0,        ROT0,   "Dynax (Fabtek license)",   "Sports Match",                                                  GAME_SUPPORTS_SAVE )
69807214/* these 4 are Korean hacks / bootlegs of Dragon Punch / Sports Match */
6981GAME( 1994, maya,     0,        sprtmtch, sprtmtch, maya,     ROT0,   "Promat",                   "Maya (set 1)",                                                 0 ) // this set has backgrounds blacked out in attract
6982GAME( 1994, mayaa,    maya,     sprtmtch, sprtmtch, maya,     ROT0,   "Promat",                   "Maya (set 2)",                                                 0 )
6983GAME( 199?, inca,     0,        sprtmtch, sprtmtch, maya,     ROT0,   "<unknown>",                "Inca",                                                         0 )
6984GAME( 199?, blktouch, 0,        sprtmtch, sprtmtch, blktouch, ROT0,   "Yang Gi Co Ltd.",          "Black Touch (Korea)",                                          0 )
7215GAME( 1994, maya,     0,        sprtmtch, sprtmtch, maya,     ROT0,   "Promat",                   "Maya (set 1)",                                                  GAME_SUPPORTS_SAVE ) // this set has backgrounds blacked out in attract
7216GAME( 1994, mayaa,    maya,     sprtmtch, sprtmtch, maya,     ROT0,   "Promat",                   "Maya (set 2)",                                                  GAME_SUPPORTS_SAVE )
7217GAME( 199?, inca,     0,        sprtmtch, sprtmtch, maya,     ROT0,   "<unknown>",                "Inca",                                                          GAME_SUPPORTS_SAVE )
7218GAME( 199?, blktouch, 0,        sprtmtch, sprtmtch, blktouch, ROT0,   "Yang Gi Co Ltd.",          "Black Touch (Korea)",                                           GAME_SUPPORTS_SAVE )
69857219
6986GAME( 1989, mjfriday, 0,        mjfriday, mjfriday, 0,        ROT180, "Dynax",                    "Mahjong Friday (Japan)",                                       0 )
6987GAME( 1989, gekisha,  0,        gekisha,  gekisha,  0,        ROT180, "Dynax",                    "Mahjong Gekisha",                                              0 )
6988GAME( 1990, mcnpshnt, 0,        mcnpshnt, mcnpshnt, 0,        ROT0,   "Dynax",                    "Mahjong Campus Hunting (Japan)",                               0 )
6989GAME( 1990, 7jigen,   0,        nanajign, nanajign, 0,        ROT180, "Dynax",                    "7jigen no Youseitachi - Mahjong 7 Dimensions (Japan)",         GAME_IMPERFECT_GRAPHICS )
6990GAME( 1990, jantouki, 0,        jantouki, jantouki, 0,        ROT0,   "Dynax",                    "Jong Tou Ki (Japan)",                                          0 )
6991GAME( 1991, mjdialq2, 0,        mjdialq2, mjdialq2, 0,        ROT180, "Dynax",                    "Mahjong Dial Q2 (Japan)",                                      0 )
6992GAME( 1991, yarunara, 0,        yarunara, yarunara, 0,        ROT180, "Dynax",                    "Mahjong Yarunara (Japan)",                                     0 )
6993GAME( 1991, mjangels, 0,        yarunara, yarunara, 0,        ROT180, "Dynax",                    "Mahjong Angels - Comic Theater Vol.2 (Japan)",                 0 )
6994GAME( 1992, quiztvqq, 0,        yarunara, quiztvqq, 0,        ROT180, "Dynax",                    "Quiz TV Gassyuukoku Q&Q (Japan)",                              0 )
6995GAME( 1993, mjelctrn, 0,        mjelctrn, mjelctrn, mjelct3,  ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 4, Japan)",                   0 )
6996GAME( 1990, mjelct3,  mjelctrn, mjelctrn, mjelct3,  mjelct3,  ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 3, Japan)",                   0 )
6997GAME( 1990, mjelct3a, mjelctrn, mjelctrn, mjelct3,  mjelct3a, ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 3, alt., Japan)",             0 )
6998GAME( 1993, mjelctrb, mjelctrn, mjelctrn, mjelct3,  mjelct3,  ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 4, Japan, BOOTLEG)",          0 )
6999GAME( 1990, majxtal7, 0,        majxtal7, majxtal7, mjelct3,  ROT180, "Dynax",                    "Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan)",GAME_IMPERFECT_GRAPHICS )
7000GAME( 1990, neruton,  0,        neruton,  neruton,  mjelct3,  ROT180, "Dynax / Yukiyoshi Tokoro", "Mahjong Neruton Haikujiradan (Japan)",                         GAME_IMPERFECT_GRAPHICS )
7001GAME( 1991, hanayara, 0,        yarunara, hanayara, 0,        ROT180, "Dynax",                    "Hana wo Yaraneba! (Japan)",                                    0 )
7002GAME( 1991, mjcomv1,  0,        yarunara, yarunara, 0,        ROT180, "Dynax",                    "Mahjong Comic Gekijou Vol.1 (Japan)",                          0 )
7003GAME( 1991, tenkai,   0,        tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen",                                            0 )
7004GAME( 1991, tenkai2b, tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen Part 2 (bootleg)",                           GAME_NOT_WORKING )
7005GAME( 1991, tenkaibb, tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (bootleg b)",                                0 )
7006GAME( 1991, tenkaicb, tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (bootleg c)",                                0 )
7007GAME( 1991, tenkaid,  tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (set 1)",                                    GAME_NOT_WORKING )
7008GAME( 1991, tenkaie,  tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (set 2)",                                    0 )
7009GAME( 1992, htengoku, 0,        htengoku, htengoku, 0,        ROT180, "Dynax",                    "Hanafuda Hana Tengoku (Japan)",                                0 )
7010GAME( 1994, mjreach,  0,        tenkai,   mjreach,  mjreach,  ROT0,   "Dynax",                    "Mahjong Reach (bootleg)",                                      0 )
7011GAME( 1995, shpeng,   0,        sprtmtch, sprtmtch, 0,        ROT0,   "WSAC Systems?",            "Sea Hunter Penguin",                                           GAME_WRONG_COLORS ) // not a dynax board. proms?
7012GAME( 1996, majrjhdx, 0,        majrjhdx, tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Raijinhai DX",                                         GAME_NOT_WORKING )
7220GAME( 1989, mjfriday, 0,        mjfriday, mjfriday, 0,        ROT180, "Dynax",                    "Mahjong Friday (Japan)",                                        GAME_SUPPORTS_SAVE )
7221GAME( 1989, gekisha,  0,        gekisha,  gekisha,  0,        ROT180, "Dynax",                    "Mahjong Gekisha",                                               GAME_SUPPORTS_SAVE )
7222GAME( 1990, mcnpshnt, 0,        mcnpshnt, mcnpshnt, 0,        ROT0,   "Dynax",                    "Mahjong Campus Hunting (Japan)",                                GAME_SUPPORTS_SAVE )
7223GAME( 1990, 7jigen,   0,        nanajign, nanajign, 0,        ROT180, "Dynax",                    "7jigen no Youseitachi - Mahjong 7 Dimensions (Japan)",          GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
7224GAME( 1990, jantouki, 0,        jantouki, jantouki, 0,        ROT0,   "Dynax",                    "Jong Tou Ki (Japan)",                                           GAME_SUPPORTS_SAVE )
7225GAME( 1991, mjdialq2, 0,        mjdialq2, mjdialq2, 0,        ROT180, "Dynax",                    "Mahjong Dial Q2 (Japan)",                                       GAME_SUPPORTS_SAVE )
7226GAME( 1991, yarunara, 0,        yarunara, yarunara, 0,        ROT180, "Dynax",                    "Mahjong Yarunara (Japan)",                                      GAME_SUPPORTS_SAVE )
7227GAME( 1991, mjangels, 0,        yarunara, yarunara, 0,        ROT180, "Dynax",                    "Mahjong Angels - Comic Theater Vol.2 (Japan)",                  GAME_SUPPORTS_SAVE )
7228GAME( 1992, quiztvqq, 0,        yarunara, quiztvqq, 0,        ROT180, "Dynax",                    "Quiz TV Gassyuukoku Q&Q (Japan)",                               GAME_SUPPORTS_SAVE )
7229GAME( 1993, mjelctrn, 0,        mjelctrn, mjelctrn, mjelct3,  ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 4, Japan)",                    GAME_SUPPORTS_SAVE )
7230GAME( 1990, mjelct3,  mjelctrn, mjelctrn, mjelct3,  mjelct3,  ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 3, Japan)",                    GAME_SUPPORTS_SAVE )
7231GAME( 1990, mjelct3a, mjelctrn, mjelctrn, mjelct3,  mjelct3a, ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 3, alt., Japan)",              GAME_SUPPORTS_SAVE )
7232GAME( 1993, mjelctrb, mjelctrn, mjelctrn, mjelct3,  mjelct3,  ROT180, "Dynax",                    "Mahjong Electron Base (parts 2 & 4, Japan, BOOTLEG)",           GAME_SUPPORTS_SAVE )
7233GAME( 1990, majxtal7, 0,        majxtal7, majxtal7, mjelct3,  ROT180, "Dynax",                    "Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
7234GAME( 1990, neruton,  0,        neruton,  neruton,  mjelct3,  ROT180, "Dynax / Yukiyoshi Tokoro", "Mahjong Neruton Haikujiradan (Japan)",                          GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
7235GAME( 1991, hanayara, 0,        yarunara, hanayara, 0,        ROT180, "Dynax",                    "Hana wo Yaraneba! (Japan)",                                     GAME_SUPPORTS_SAVE )
7236GAME( 1991, mjcomv1,  0,        yarunara, yarunara, 0,        ROT180, "Dynax",                    "Mahjong Comic Gekijou Vol.1 (Japan)",                           GAME_SUPPORTS_SAVE )
7237GAME( 1991, tenkai,   0,        tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen",                                             GAME_SUPPORTS_SAVE )
7238GAME( 1991, tenkai2b, tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen Part 2 (bootleg)",                            GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
7239GAME( 1991, tenkaibb, tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (bootleg b)",                                 GAME_SUPPORTS_SAVE )
7240GAME( 1991, tenkaicb, tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (bootleg c)",                                 GAME_SUPPORTS_SAVE )
7241GAME( 1991, tenkaid,  tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (set 1)",                                     GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
7242GAME( 1991, tenkaie,  tenkai,   tenkai,   tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Tenkaigen (set 2)",                                     GAME_SUPPORTS_SAVE )
7243GAME( 1992, htengoku, 0,        htengoku, htengoku, 0,        ROT180, "Dynax",                    "Hanafuda Hana Tengoku (Japan)",                                 GAME_SUPPORTS_SAVE )
7244GAME( 1994, mjreach,  0,        tenkai,   mjreach,  mjreach,  ROT0,   "Dynax",                    "Mahjong Reach (bootleg)",                                       GAME_SUPPORTS_SAVE )
7245GAME( 1995, shpeng,   0,        sprtmtch, sprtmtch, 0,        ROT0,   "WSAC Systems?",            "Sea Hunter Penguin",                                            GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE ) // not a dynax board. proms?
7246GAME( 1996, majrjhdx, 0,        majrjhdx, tenkai,   0,        ROT0,   "Dynax",                    "Mahjong Raijinhai DX",                                          GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
src/mame/drivers/mazerbla.c
r7640r7641
154154VIDEO_UPDATE( test_vcu )
155155{
156156   mazerbla_state *state = (mazerbla_state *)screen->machine->driver_data;
157   int j;
158157   char buf[128];
159158
160159   UINT32 color_base = 0;
src/mame/drivers/poo.c
r7640r7641
99TODO:
1010-merge with jack.c driver, this is a modification of that HW (with colscroll)
1111-accurate game speed (controlled by an irq)
12-title screen colors are wrong? But I can't see how I could fix it without breaking anything
13 else
1412-a bunch of unmapped read / writes
1513-writes to ROM regions
1614
r7640r7641
4846#include "sound/ay8910.h"
4947
5048static UINT8 *poo_vram, *poo_scrolly, *poo_sprites;
49static UINT8 vram_colbank;
5150
5251VIDEO_START(unclepoo)
5352{
r7640r7641
6766      for (y=0;y<32;y++)
6867      {
6968         int tile = poo_vram[count+0x000] | ((poo_vram[count+0x400] & 3) <<8);
70         int color = (poo_vram[count+0x400] & 0xf8) >> 3;
69         int color = (poo_vram[count+0x400] & 0x38) >> 3;
7170         int scrolly = (poo_scrolly[x*4]);
7271
73         drawgfx_opaque(bitmap,cliprect,gfx,tile,color,0,0,x*8,256-(y*8)+scrolly);
74         drawgfx_opaque(bitmap,cliprect,gfx,tile,color,0,0,x*8,0-(y*8)+scrolly);
72         drawgfx_opaque(bitmap,cliprect,gfx,tile,color+vram_colbank,0,0,x*8,256-(y*8)+scrolly);
73         drawgfx_opaque(bitmap,cliprect,gfx,tile,color+vram_colbank,0,0,x*8,0-(y*8)+scrolly);
7574
7675         count++;
7776      }
r7640r7641
115114#endif
116115
117116
117#if 0
118118static WRITE8_HANDLER( unk_w )
119119{
120
120   printf("%02x %02x\n",data,offset);
121121}
122#endif
122123
123124/* soundlatch write */
124static WRITE8_HANDLER( test_w )
125static WRITE8_HANDLER( sound_cmd_w )
125126{
126127   soundlatch_w(space, 0, (data & 0xff));
127128   cputag_set_input_line(space->machine, "subcpu", 0, HOLD_LINE);
128129}
129130
130static WRITE8_HANDLER( test2_w )
131static WRITE8_HANDLER( poo_vregs_w )
131132{
132   //x[1] = data;
133   //soundlatch2_w(space, 0, (data & 0xff));
134   //cputag_set_input_line(space->machine, "subcpu", 0, HOLD_LINE);
133   // bit 2 used, unknown purpose
134   vram_colbank = data & 0x18;
135135}
136136
137137static ADDRESS_MAP_START( unclepoo_main_map, ADDRESS_SPACE_PROGRAM, 8 )
138   AM_RANGE(0x0000, 0x7fff) AM_ROM
138   AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP
139139   AM_RANGE(0x8000, 0x8fff) AM_RAM
140140   AM_RANGE(0x9000, 0x97ff) AM_RAM
141   AM_RANGE(0x9800, 0x9801) AM_READ(unk_inp_r) //AM_WRITE( unk_w )
142
141143   AM_RANGE(0xb000, 0xb07f) AM_RAM AM_BASE(&poo_sprites)
142144   AM_RANGE(0xb080, 0xb0ff) AM_RAM AM_BASE(&poo_scrolly)
143145
144   AM_RANGE(0x9800, 0x9801) AM_READ(unk_inp_r) AM_WRITE( unk_w )
146   AM_RANGE(0xb400, 0xb400) AM_WRITE(sound_cmd_w)
145147
146   AM_RANGE(0xb400, 0xb400) AM_WRITE(test_w)
147
148148   AM_RANGE(0xb500, 0xb500) AM_READ_PORT("DSW1")
149149   AM_RANGE(0xb501, 0xb501) AM_READ_PORT("DSW2")
150150   AM_RANGE(0xb502, 0xb502) AM_READ_PORT("P1")
151151   AM_RANGE(0xb503, 0xb503) AM_READ_PORT("P2")
152152   AM_RANGE(0xb504, 0xb504) AM_READ_PORT("SYSTEM")
153153
154   AM_RANGE(0xb700, 0xb700) AM_WRITE(test2_w)
154   AM_RANGE(0xb700, 0xb700) AM_WRITE(poo_vregs_w)
155155
156156   AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE(&poo_vram)
157157
r7640r7641
159159
160160static ADDRESS_MAP_START( unclepoo_main_portmap, ADDRESS_SPACE_IO, 8 )
161161   ADDRESS_MAP_GLOBAL_MASK(0xff)
162
163162ADDRESS_MAP_END
164163
165#if 0
166static WRITE8_HANDLER( mem_w )
167{
168164
169}
170#endif
171165
172166static ADDRESS_MAP_START( unclepoo_sub_map, ADDRESS_SPACE_PROGRAM, 8 )
173167   AM_RANGE(0x0000, 0x0fff) AM_ROM
174
175168   AM_RANGE(0x4000, 0x43ff) AM_RAM
176
177169   AM_RANGE(0x6000, 0x6000) AM_WRITENOP  /* R/C filter ??? */
178170ADDRESS_MAP_END
179171
180
181
182172static ADDRESS_MAP_START( unclepoo_sub_portmap, ADDRESS_SPACE_IO, 8 )
183173   ADDRESS_MAP_GLOBAL_MASK(0xff)
184
185174   AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("ay", ay8910_r, ay8910_data_w)
186175   AM_RANGE(0x80, 0x80) AM_DEVWRITE("ay", ay8910_address_w)
187176ADDRESS_MAP_END
r7640r7641
198187   PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
199188
200189   PORT_START("P2")
201   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
202   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
203   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
204   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
205   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
206   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
190   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
191   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
192   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
193   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
194   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
195   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
207196   PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
208197
209198   PORT_START("SYSTEM")
r7640r7641
211200   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
212201   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
213202   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
214   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
215   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
216   PORT_DIPSETTING(    0x10, DEF_STR( On ) )
217   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
218   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
219   PORT_DIPSETTING(    0x20, DEF_STR( On ) )
220   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
221   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
222   PORT_DIPSETTING(    0x40, DEF_STR( On ) )
223   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
224   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
225   PORT_DIPSETTING(    0x80, DEF_STR( On ) )
203   PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
226204
227205   PORT_START("DSW1")
228   PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) )      PORT_DIPLOCATION("SW1:1,2")
206   PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) )      PORT_DIPLOCATION("SW1:!1,!2")
229207   PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
230208   PORT_DIPSETTING(    0x03, DEF_STR( 4C_3C ) )
231209   PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
232210   PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
233   PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) )      PORT_DIPLOCATION("SW1:3,4")
211   PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) )      PORT_DIPLOCATION("SW1:!3,!4")
234212   PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) )
235213   PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
236214   PORT_DIPSETTING(    0x0c, DEF_STR( 4C_3C ) )
237215   PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
238   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Lives ) )      PORT_DIPLOCATION("SW1:5")
216   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Lives ) )      PORT_DIPLOCATION("SW1:!5")
239217   PORT_DIPSETTING(    0x00, "3" )
240218   PORT_DIPSETTING(    0x10, "5" )
241   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW1:6")
219   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW1:!6")
220   PORT_DIPSETTING(    0x00, "Every 30000" )
221   PORT_DIPSETTING(    0x20, "30000 Only" )
222   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW1:!7")
242223   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
243   PORT_DIPSETTING(    0x20, DEF_STR( On ) )
244   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW1:7")
245   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
246224   PORT_DIPSETTING(    0x40, DEF_STR( On ) )
247   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW1:8")
225   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW1:!8")
248226   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
249227   PORT_DIPSETTING(    0x80, DEF_STR( On ) )
250228
251229   PORT_START("DSW2")
252   PORT_DIPNAME( 0x01, 0x00, "IN2" )         PORT_DIPLOCATION("SW2:1")
230   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("SW2:!1")
231   PORT_DIPSETTING(    0x01, DEF_STR( Upright ) )
232   PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
233   PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:!2")
253234   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
254   PORT_DIPSETTING(    0x01, DEF_STR( On ) )
255   PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:2")
256   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
257235   PORT_DIPSETTING(    0x02, DEF_STR( On ) )
258   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:3")
236   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:!3")
259237   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
260238   PORT_DIPSETTING(    0x04, DEF_STR( On ) )
261   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:4")
239   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:!4")
262240   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
263241   PORT_DIPSETTING(    0x08, DEF_STR( On ) )
264   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:5")
242   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:!5")
265243   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
266244   PORT_DIPSETTING(    0x10, DEF_STR( On ) )
267   PORT_DIPNAME( 0x20, 0x00, "Test Mode" )         PORT_DIPLOCATION("SW2:6")
245   PORT_DIPNAME( 0x20, 0x00, "Test Mode" )         PORT_DIPLOCATION("SW2:!6")
268246   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
269247   PORT_DIPSETTING(    0x20, DEF_STR( On ) )
270   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:7")
248   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:!7")
271249   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
272250   PORT_DIPSETTING(    0x40, DEF_STR( On ) )
273   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW2:8")
251   PORT_DIPNAME( 0x80, 0x00, "Start with 255 Lives (Cheat)" )   PORT_DIPLOCATION("SW2:!8")
274252   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
275253   PORT_DIPSETTING(    0x80, DEF_STR( On ) )
276
277
278254INPUT_PORTS_END
279255
280256static const gfx_layout tiles8x8_layout =
r7640r7641
318294   }
319295}
320296
321/* ??? */
322#if 0
323
324static READ8_HANDLER( test_r )
325{
326   return 0xf6;
327}
328
329/* soundlatch */
330static READ8_HANDLER( test2_r )
331{
332   return 0x00;
333}
334#endif
335
336297 static READ8_HANDLER( timer_r )
337298{
338299   return cpu_get_total_cycles(space->cpu) / 16;
r7640r7641
405366   ROM_LOAD( "diatec_l.bin", 0x100, 0x100, CRC(b04d466a) SHA1(1438abeae76ef807ba34bd6d3e4c44f707dbde6e) )
406367ROM_END
407368
408GAME( 1983, unclepoo, 0, unclepoo, unclepoo, 0, ROT90, "Diatec",         "Uncle Poo", 0 )
369GAME( 1983, unclepoo, 0, unclepoo, unclepoo, 0, ROT90, "Diatec",         "Uncle Poo", GAME_NO_COCKTAIL )
src/mame/drivers/namcos11.c
r7640r7641
10941094   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
10951095
10961096   PORT_MODIFY( "PLAYER3" )
1097   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
1097   PORT_BIT( 0xcf, IP_ACTIVE_LOW, IPT_UNUSED )
1098   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
1099   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 )
10981100
10991101   PORT_MODIFY( "PLAYER4" )
1100   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
1102   PORT_BIT( 0xcf, IP_ACTIVE_LOW, IPT_UNUSED )
1103   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER( 2 )
1104   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER( 2 )
11011105INPUT_PORTS_END
11021106
11031107static INPUT_PORTS_START( souledge )
src/mame/drivers/galaxian.c
r7640r7641
10931093
10941094static READ8_DEVICE_HANDLER( moonwar_input_port_0_r )
10951095{
1096   UINT8 sign;
1097   UINT8 delta;
1098
1099   delta = (moonwar_port_select ? input_port_read(device->machine, "IN3") : input_port_read(device->machine, "IN4"));
1100
1101   sign = (delta & 0x80) >> 3;
1102   delta &= 0x0f;
1103
1104   return ((input_port_read(device->machine, "IN0") & 0xe0) | delta | sign );
1096   // see http://www.cityofberwyn.com/schematics/stern/MoonWar_opto.tiff for schematic
1097   // I.e. a 74ls161 counts from 0 to 15 which is the absolute number of bars passed on the quadrature
1098   signed char dialread = (moonwar_port_select ? input_port_read(device->machine, "IN3") : input_port_read(device->machine, "IN4"));
1099   static int counter_74ls161 = 0;
1100   static int direction = 0;
1101   UINT8 ret;
1102   UINT8 buttons = (input_port_read(device->machine,"IN0")&0xe0);
1103   if (dialread < 0) direction = 0;
1104   else if (dialread > 0) direction = 0x10;
1105   counter_74ls161 += abs(dialread);
1106   counter_74ls161 &= 0xf;
1107   ret = counter_74ls161 | direction | buttons;
1108   //fprintf(stderr, "dialread1: %02x, counter_74ls161: %02x, spinner ret is %02x\n", dialread, counter_74ls161, ret);
1109   return ret;
11051110}
11061111
11071112
src/mame/drivers/toaplan1.c
r7640r7641
1919    hellfir1    B90         HellFire (1 Player version) Uses Taito rom ID number
2020    hellfir2    B90         HellFire (2 Player, ealier version) Uses Taito rom ID number
2121    zerowing    TP-O15      Zero Wing
22    zerowng2    TP-O15      Zero Wing (2 player simultaneous version, Williams Electronics Games, Inc)
22    zerowing2   TP-O15      Zero Wing (2 player simultaneous version, Williams Electronics Games, Inc)
2323    demonwld    TP-O16      Demon's World/Horror Story [1990]
2424    demonwl1    TP-O16      Demon's World/Horror Story [1989] (Taito license)
2525    demonwl2    TP-O16      Demon's World/Horror Story [1989] (early edition)
r7640r7641
337337***************************************************************************/
338338
339339#include "emu.h"
340#include "cpu/m68000/m68000.h"
340341#include "cpu/z80/z80.h"
341#include "cpu/m68000/m68000.h"
342#include "cpu/z180/z180.h"
342343#include "cpu/tms32010/tms32010.h"
343344#include "includes/toaplipt.h"
344345#include "includes/toaplan1.h"
r7640r7641
639640ADDRESS_MAP_END
640641
641642
643/***************************** HD647180 Memory Map **************************/
642644
645static ADDRESS_MAP_START( hd647180_mem_map, ADDRESS_SPACE_PROGRAM, 8 )
646   AM_RANGE(0x00000, 0x03fff) AM_ROM   /* Internal 16k byte ROM */
647   AM_RANGE(0x0fe00, 0x0ffff) AM_RAM   /* Internal 512 byte RAM */
648ADDRESS_MAP_END
649
650
651
643652/*****************************************************************************
644653    Generic Input Port definitions
645654*****************************************************************************/
r7640r7641
11551164static INPUT_PORTS_START( samesame2 )
11561165   PORT_INCLUDE( samesame )
11571166
1167   PORT_MODIFY("P2")
1168   TOAPLAN1_PLAYER_INPUT( 2, IPT_UNKNOWN, )
1169
1170   PORT_MODIFY("DSWA")      /* DSW A */
1171   PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )   /* No cocktail */
1172   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
1173   PORT_DIPSETTING(    0x01, DEF_STR( On ) )
1174
11581175   PORT_MODIFY("TJUMP")      /* Territory Jumper Block */
11591176/* settings listed in service mode, but not actually used
11601177    PORT_DIPNAME( 0x03, 0x00, "Territory" )
r7640r7641
14961513static MACHINE_DRIVER_START( rallybik )
14971514
14981515   /* basic machine hardware */
1499   MDRV_CPU_ADD("maincpu", M68000, 10000000)
1516   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)
15001517   MDRV_CPU_PROGRAM_MAP(rallybik_main_map)
15011518   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
15021519
1503   MDRV_CPU_ADD("audiocpu", Z80,28000000/8)      /* 3.5MHz (28MHz Oscillator) */
1520   MDRV_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
15041521   MDRV_CPU_PROGRAM_MAP(toaplan1_sound_map)
15051522   MDRV_CPU_IO_MAP(rallybik_sound_io_map)
15061523
r7640r7641
15121529   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK | VIDEO_BUFFERS_SPRITERAM)
15131530
15141531   MDRV_SCREEN_ADD("screen", RASTER)
1515   MDRV_SCREEN_REFRESH_RATE(55.14)    /* verified on pcb */
1532   MDRV_SCREEN_REFRESH_RATE(55.14)      /* verified on pcb */
15161533   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1517   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1534   MDRV_SCREEN_SIZE(512, 512)   /* 512x288 active */
15181535   MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
15191536
15201537   MDRV_GFXDECODE(rallybik)
r7640r7641
15271544   /* sound hardware */
15281545   MDRV_SPEAKER_STANDARD_MONO("mono")
15291546
1530   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
1547   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
15311548   MDRV_SOUND_CONFIG(ym3812_config)
15321549   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
15331550MACHINE_DRIVER_END
r7640r7641
15361553static MACHINE_DRIVER_START( truxton )
15371554
15381555   /* basic machine hardware */
1539   MDRV_CPU_ADD("maincpu", M68000, 10000000)
1556   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)
15401557   MDRV_CPU_PROGRAM_MAP(truxton_main_map)
15411558   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
15421559
1543   MDRV_CPU_ADD("audiocpu", Z80,28000000/8)      /* 3.5MHz (28MHz Oscillator) */
1560   MDRV_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
15441561   MDRV_CPU_PROGRAM_MAP(toaplan1_sound_map)
15451562   MDRV_CPU_IO_MAP(truxton_sound_io_map)
15461563
r7640r7641
15521569   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
15531570
15541571   MDRV_SCREEN_ADD("screen", RASTER)
1555   MDRV_SCREEN_REFRESH_RATE(57.59)   /* verified on pcb */
1572   MDRV_SCREEN_REFRESH_RATE(57.59)      /* verified on pcb */
15561573   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1557   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1574   MDRV_SCREEN_SIZE(512, 512)   /* 512x320 active */
15581575   MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
15591576
15601577   MDRV_GFXDECODE(toaplan1)
r7640r7641
15671584   /* sound hardware */
15681585   MDRV_SPEAKER_STANDARD_MONO("mono")
15691586
1570   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
1587   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
15711588   MDRV_SOUND_CONFIG(ym3812_config)
15721589   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
15731590MACHINE_DRIVER_END
r7640r7641
15761593static MACHINE_DRIVER_START( hellfire )
15771594
15781595   /* basic machine hardware */
1579   MDRV_CPU_ADD("maincpu", M68000, 10000000)
1596   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)
15801597   MDRV_CPU_PROGRAM_MAP(hellfire_main_map)
15811598   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
15821599
1583   MDRV_CPU_ADD("audiocpu", Z80,28000000/8)      /* 3.5MHz (28MHz Oscillator) */
1600   MDRV_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
15841601   MDRV_CPU_PROGRAM_MAP(toaplan1_sound_map)
15851602   MDRV_CPU_IO_MAP(hellfire_sound_io_map)
15861603
r7640r7641
15941611   MDRV_SCREEN_ADD("screen", RASTER)
15951612   MDRV_SCREEN_REFRESH_RATE(60)
15961613   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1597   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1614   MDRV_SCREEN_SIZE(512, 512)   /* 512x240 active */
15981615   MDRV_SCREEN_VISIBLE_AREA(0, 319, 16, 255)
15991616
16001617   MDRV_GFXDECODE(toaplan1)
r7640r7641
16071624   /* sound hardware */
16081625   MDRV_SPEAKER_STANDARD_MONO("mono")
16091626
1610   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
1627   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
16111628   MDRV_SOUND_CONFIG(ym3812_config)
16121629   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
16131630MACHINE_DRIVER_END
r7640r7641
16161633static MACHINE_DRIVER_START( zerowing )
16171634
16181635   /* basic machine hardware */
1619   MDRV_CPU_ADD("maincpu", M68000, 10000000)
1636   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)
16201637   MDRV_CPU_PROGRAM_MAP(zerowing_main_map)
16211638   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
16221639
1623   MDRV_CPU_ADD("audiocpu", Z80,28000000/8)      /* 3.5MHz (28MHz Oscillator) */
1640   MDRV_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
16241641   MDRV_CPU_PROGRAM_MAP(toaplan1_sound_map)
16251642   MDRV_CPU_IO_MAP(zerowing_sound_io_map)
16261643
r7640r7641
16321649   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
16331650
16341651   MDRV_SCREEN_ADD("screen", RASTER)
1635   MDRV_SCREEN_REFRESH_RATE( (28000000.0 / 4) / (450 * 282) )   /* fixed by SUZ */
1652   MDRV_SCREEN_REFRESH_RATE( (XTAL_28MHz / 4) / (450 * 282) )   /* fixed by SUZ */
16361653   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1637   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1654   MDRV_SCREEN_SIZE(512, 512)   /* 512x240 mostly active, 512x512 actually used */
16381655   MDRV_SCREEN_VISIBLE_AREA(0, 319, 16, 255)
16391656
16401657   MDRV_GFXDECODE(toaplan1)
r7640r7641
16471664   /* sound hardware */
16481665   MDRV_SPEAKER_STANDARD_MONO("mono")
16491666
1650   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
1667   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
16511668   MDRV_SOUND_CONFIG(ym3812_config)
16521669   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
16531670MACHINE_DRIVER_END
r7640r7641
16561673static MACHINE_DRIVER_START( demonwld )
16571674
16581675   /* basic machine hardware */
1659   MDRV_CPU_ADD("maincpu", M68000, 10000000)
1676   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)
16601677   MDRV_CPU_PROGRAM_MAP(demonwld_main_map)
16611678   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
16621679
1663   MDRV_CPU_ADD("audiocpu", Z80,28000000/8)      /* 3.5MHz (28MHz Oscillator) */
1680   MDRV_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
16641681   MDRV_CPU_PROGRAM_MAP(toaplan1_sound_map)
16651682   MDRV_CPU_IO_MAP(demonwld_sound_io_map)
16661683
1667   MDRV_CPU_ADD("dsp", TMS32010,28000000/2)   /* 14MHz CLKin */
1684   MDRV_CPU_ADD("dsp", TMS32010, XTAL_28MHz/2)
16681685   MDRV_CPU_PROGRAM_MAP(DSP_program_map)
16691686   MDRV_CPU_IO_MAP(DSP_io_map)
16701687
r7640r7641
16761693   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
16771694
16781695   MDRV_SCREEN_ADD("screen", RASTER)
1679   MDRV_SCREEN_REFRESH_RATE(55.14)      /* verified on pcb */
1696   MDRV_SCREEN_REFRESH_RATE(55.14)      /* verified on pcb */
16801697   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1681   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1698   MDRV_SCREEN_SIZE(512, 512)   /* 512x240 active */
16821699   MDRV_SCREEN_VISIBLE_AREA(0, 319, 16, 255)
16831700
16841701   MDRV_GFXDECODE(toaplan1)
r7640r7641
16911708   /* sound hardware */
16921709   MDRV_SPEAKER_STANDARD_MONO("mono")
16931710
1694   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
1711   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
16951712   MDRV_SOUND_CONFIG(ym3812_config)
16961713   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
16971714MACHINE_DRIVER_END
r7640r7641
17001717static MACHINE_DRIVER_START( samesame )
17011718
17021719   /* basic machine hardware */
1703   MDRV_CPU_ADD("maincpu", M68000, 10000000)
1720   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)
17041721   MDRV_CPU_PROGRAM_MAP(samesame_main_map)
17051722   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
17061723
1724   MDRV_CPU_ADD("audiocpu", Z180, XTAL_28MHz/8)   /* HD647180XOFS6 CPU */
1725   MDRV_CPU_PROGRAM_MAP(hd647180_mem_map)
1726   MDRV_CPU_FLAGS(CPU_DISABLE)      /* Internal code is not dumped */
1727
17071728   MDRV_MACHINE_RESET(toaplan1)
17081729
17091730   /* video hardware */
r7640r7641
17121733   MDRV_SCREEN_ADD("screen", RASTER)
17131734   MDRV_SCREEN_REFRESH_RATE(60)
17141735   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1715   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1736   MDRV_SCREEN_SIZE(512, 512)   /* 512x320 active */
17161737   MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
17171738
17181739   MDRV_GFXDECODE(toaplan1)
r7640r7641
17251746   /* sound hardware */
17261747   MDRV_SPEAKER_STANDARD_MONO("mono")
17271748
1728   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
1749   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
17291750   MDRV_SOUND_CONFIG(ym3812_config)
17301751   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
17311752MACHINE_DRIVER_END
r7640r7641
17341755static MACHINE_DRIVER_START( outzone )
17351756
17361757   /* basic machine hardware */
1737   MDRV_CPU_ADD("maincpu", M68000, 10000000)
1758   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)
17381759   MDRV_CPU_PROGRAM_MAP(outzone_main_map)
17391760   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
17401761
1741   MDRV_CPU_ADD("audiocpu", Z80,28000000/8)      /* 3.5MHz (28MHz Oscillator) */
1762   MDRV_CPU_ADD("audiocpu", Z80, XTAL_28MHz/8)
17421763   MDRV_CPU_PROGRAM_MAP(toaplan1_sound_map)
17431764   MDRV_CPU_IO_MAP(outzone_sound_io_map)
17441765
r7640r7641
17521773   MDRV_SCREEN_ADD("screen", RASTER)
17531774   MDRV_SCREEN_REFRESH_RATE(60)
17541775   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1755   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1776   MDRV_SCREEN_SIZE(512, 512)   /* 512x256 active */
17561777   MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
17571778
17581779   MDRV_GFXDECODE(outzone)
r7640r7641
17651786   /* sound hardware */
17661787   MDRV_SPEAKER_STANDARD_MONO("mono")
17671788
1768   MDRV_SOUND_ADD("ymsnd", YM3812, 28000000/8)
1789   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)
17691790   MDRV_SOUND_CONFIG(ym3812_config)
17701791   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
17711792MACHINE_DRIVER_END
r7640r7641
17741795static MACHINE_DRIVER_START( vimana )
17751796
17761797   /* basic machine hardware */
1777   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* verified on pcb */
1798   MDRV_CPU_ADD("maincpu", M68000, XTAL_10MHz)   /* verified on pcb */
17781799   MDRV_CPU_PROGRAM_MAP(vimana_main_map)
17791800   MDRV_CPU_VBLANK_INT("screen", toaplan1_interrupt)
17801801
1802   MDRV_CPU_ADD("audiocpu", Z180, XTAL_28MHz/8)   /* HD647180XOFS6 CPU */
1803   MDRV_CPU_PROGRAM_MAP(hd647180_mem_map)
1804   MDRV_CPU_FLAGS(CPU_DISABLE)      /* Internal code is not dumped */
1805
17811806   MDRV_MACHINE_RESET(vimana)
17821807
17831808   /* video hardware */
17841809   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
17851810
17861811   MDRV_SCREEN_ADD("screen", RASTER)
1787   MDRV_SCREEN_REFRESH_RATE(57.59)   /* verified on pcb */
1812   MDRV_SCREEN_REFRESH_RATE(57.59)      /* verified on pcb */
17881813   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1789   MDRV_SCREEN_SIZE(432, 262)   /* copied these from toaplan2, to be verified */
1814   MDRV_SCREEN_SIZE(512, 512)   /* 512x256 active */
17901815   MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
17911816
17921817   MDRV_GFXDECODE(vm)
r7640r7641
17991824   /* sound hardware */
18001825   MDRV_SPEAKER_STANDARD_MONO("mono")
18011826
1802   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8) /* verified on pcb */
1827   MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_28MHz/8)   /* verified on pcb */
18031828   MDRV_SOUND_CONFIG(ym3812_config)
18041829   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
18051830MACHINE_DRIVER_END
r7640r7641
21732198   ROM_LOAD16_BYTE( "o17_11.bin",  0x040000, 0x20000, CRC(be07d101) SHA1(1eda14ba24532b565d6ad57490b73ff312f98b53) )
21742199   ROM_LOAD16_BYTE( "o17_12.bin",  0x040001, 0x20000, CRC(ef698811) SHA1(4c729704eba0bf469599c79009327e4fa5dc540b) )
21752200
2176   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2201   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
21772202   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
21782203   ROM_LOAD( "hd647180.017",  0x00000, 0x08000, NO_DUMP )
21792204
r7640r7641
22012226   ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
22022227   ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
22032228
2204   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2229   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
22052230   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
22062231   ROM_LOAD( "hd647180.017",  0x00000, 0x08000, NO_DUMP )
22072232
r7640r7641
22292254   ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
22302255   ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
22312256
2232   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2257   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
22332258   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
22342259   ROM_LOAD( "hd647180.017",  0x00000, 0x08000, NO_DUMP )
22352260
r7640r7641
22572282   ROM_LOAD16_BYTE( "o17_11ii.7j", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
22582283   ROM_LOAD16_BYTE( "o17_12ii.7l", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
22592284
2260   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2285   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
22612286   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
22622287   ROM_LOAD( "hd647180.017",  0x00000, 0x08000, NO_DUMP )
22632288
r7640r7641
22852310   ROM_LOAD16_BYTE( "o17_11x.bin", 0x040000, 0x20000, CRC(6beac378) SHA1(041ba98a89a4bac32575858db8a061bdf7804594) )
22862311   ROM_LOAD16_BYTE( "o17_12x.bin", 0x040001, 0x20000, CRC(6adb6eb5) SHA1(9b6e63aa50d271c2bb0b4cf822fc6f3684f10230) )
22872312
2288   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2313   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
22892314   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
22902315   ROM_LOAD( "hd647180.017",  0x00000, 0x08000, NO_DUMP )
22912316
r7640r7641
24562481   ROM_LOAD16_BYTE( "tp019-7a.bin",  0x000000, 0x20000, CRC(5a4bf73e) SHA1(9a43d822bc24b59278f294d0b3275595de997d16) )
24572482   ROM_LOAD16_BYTE( "tp019-8a.bin",  0x000001, 0x20000, CRC(03ba27e8) SHA1(edb5fe741d2a6a7fe5cde9a82317ea1e9447cf73) )
24582483
2459   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2484   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
24602485   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
24612486   ROM_LOAD( "hd647180.019",  0x00000, 0x08000, NO_DUMP )
24622487
r7640r7641
24802505   ROM_LOAD16_BYTE( "tp019-07.rom",  0x000000, 0x20000, CRC(78888ff2) SHA1(7e1d248f806d585952eb35ceec6a7e63ae4e22f9) )
24812506   ROM_LOAD16_BYTE( "tp019-08.rom",  0x000001, 0x20000, CRC(6cd2dc3c) SHA1(029d974eb938c5e2fbe7575f0dda342b4b12b731) )
24822507
2483   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2508   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
24842509   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
24852510   ROM_LOAD( "hd647180.019",  0x00000, 0x08000, NO_DUMP )
24862511
r7640r7641
25042529   ROM_LOAD16_BYTE( "vim07.bin",  0x000000, 0x20000, CRC(1efaea84) SHA1(f9c5d2365d8948fa66dbe61d355919db15843a28) )
25052530   ROM_LOAD16_BYTE( "vim08.bin",  0x000001, 0x20000, CRC(e45b7def) SHA1(6b92a91d64581954da8ecdbeb5fed79bcc9c5217) )
25062531
2507   ROM_REGION( 0x10000, "cpu1", 0 )   /* Sound HD647180 code */
2532   ROM_REGION( 0x10000, "audiocpu", 0 )   /* Sound HD647180 code */
25082533   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
25092534   ROM_LOAD( "hd647180.019",  0x00000, 0x08000, NO_DUMP )
25102535
r7640r7641
25432568
25442569
25452570
2546GAME( 1988, rallybik,   0,        rallybik, rallybik,  toaplan1, ROT270, "[Toaplan] Taito Corporation", "Rally Bike / Dash Yarou", GAME_NO_COCKTAIL )
2547GAME( 1988, truxton,    0,        truxton,  truxton,   toaplan1, ROT270, "[Toaplan] Taito Corporation", "Truxton / Tatsujin", GAME_NO_COCKTAIL )
2571GAME( 1988, rallybik,   0,        rallybik, rallybik,  toaplan1, ROT270, "[Toaplan] Taito Corporation", "Rally Bike / Dash Yarou", 0 )
2572GAME( 1988, truxton,    0,        truxton,  truxton,   toaplan1, ROT270, "[Toaplan] Taito Corporation", "Truxton / Tatsujin", 0 )
25482573GAME( 1989, hellfire,   0,        hellfire, hellfire,  toaplan1, ROT0,   "Toaplan (Taito license)", "Hellfire (2P Ver.)", 0 )
25492574GAME( 1989, hellfire1,  hellfire, hellfire, hellfire1, toaplan1, ROT0,   "Toaplan (Taito license)", "Hellfire (1P Ver.)", 0 )
25502575GAME( 1989, hellfire2,  hellfire, hellfire, hellfire,  toaplan1, ROT0,   "Toaplan (Taito license)", "Hellfire (2P Ver., first edition)", 0 )
25512576GAME( 1989, hellfire3,  hellfire, hellfire, hellfire,  toaplan1, ROT0,   "Toaplan (Taito license)", "Hellfire (1P Ver., alt)", 0 )
2552GAME( 1989, zerowing,   0,        zerowing, zerowing,  toaplan1, ROT0,   "Toaplan", "Zero Wing (single players)", GAME_NO_COCKTAIL )
2553GAME( 1989, zerowing2,  zerowing, zerowing, zerowing2, toaplan1, ROT0,   "[Toaplan] Williams Electronics Games, Inc", "Zero Wing (dual players)", GAME_NO_COCKTAIL )
2577GAME( 1989, zerowing,   0,        zerowing, zerowing,  toaplan1, ROT0,   "Toaplan", "Zero Wing (single players)", 0 )
2578GAME( 1989, zerowing2,  zerowing, zerowing, zerowing2, toaplan1, ROT0,   "[Toaplan] Williams Electronics Games, Inc", "Zero Wing (dual players)", 0 )
25542579GAME( 1990, demonwld,   0,        demonwld, demonwld,  demonwld, ROT0,   "Toaplan", "Demon's World / Horror Story (set 1)", 0 )
25552580GAME( 1989, demonwld1,  demonwld, demonwld, demonwld1, demonwld, ROT0,   "Toaplan", "Demon's World / Horror Story (Taito license, set 2)", 0 )
25562581GAME( 1989, demonwld2,  demonwld, demonwld, demonwld1, demonwld, ROT0,   "Toaplan", "Demon's World / Horror Story (set 3)", 0 )
src/mame/drivers/raiden2.c
r7640r7641
16321632   ROM_LOAD( "copx-d2.6s",   0x00000, 0x40000, CRC(a6732ff9) SHA1(c4856ec77869d9098da24b1bb3d7d58bb74b4cda) )
16331633ROM_END
16341634
1635ROM_START( raidndxu )
1636   ROM_REGION( 0x200000, "user1", 0 ) /* v30 main cpu */
1637   ROM_LOAD32_BYTE("1a.u1210", 0x000000, 0x80000, CRC(53e63194) SHA1(a957330e14649cf46ad27fb99c460576c59e60b1) )
1638   ROM_LOAD32_BYTE("2a.u1211", 0x000001, 0x80000, CRC(ec8d1647) SHA1(5ceae132c6c09d6bb8565e9141ee1170bbdfd5fc) )
1639   ROM_LOAD32_BYTE("3a.u129",  0x000002, 0x80000, CRC(7dbfd73d) SHA1(43cb1dbc3ccbded64fc300c262d1fd528e0391a2) )
1640   ROM_LOAD32_BYTE("4a.u1212", 0x000003, 0x80000, CRC(cb41a459) SHA1(532f0ed00a5b50a7537e5f48884d632aa5b92fb0) )
1641
1642   ROM_REGION( 0x20000, "audiocpu", 0 ) /* 64k code for sound Z80 */
1643   ROM_LOAD( "dx_5.5b",  0x000000, 0x10000,  CRC(8c46857a) SHA1(8b269cb20adf960ba4eb594d8add7739dbc9a837) )
1644
1645   ROM_REGION( 0x020000, "gfx1", 0 ) /* chars */
1646   ROM_LOAD( "dx_7.4s",   0x000000,   0x020000,   CRC(c73986d4) SHA1(d29345077753bda53560dedc95dd23f329e521d9) )
1647
1648   ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
1649   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
1650   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
1651
1652   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1653   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
1654   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
1655   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
1656   ROM_LOAD32_WORD( "dx_obj4.6k",  0x400002, 0x200000, CRC(65e50d19) SHA1(c46147b4132abce7314b46bf419ce4773e024b05) )
1657
1658   ROM_REGION( 0x100000, "oki1", 0 )   /* ADPCM samples */
1659   ROM_LOAD( "dx_6.3b",   0x00000, 0x40000, CRC(9a9196da) SHA1(3d1ee67fb0d40a231ce04d10718f07ffb76db455) )
1660
1661   ROM_REGION( 0x100000, "oki2", 0 )   /* ADPCM samples */
1662   ROM_LOAD( "dx_pcm.3a", 0x00000, 0x40000, CRC(8cf0d17e) SHA1(0fbe0b1e1ca5360c7c8329331408e3d799b4714c) )
1663
1664   ROM_REGION( 0x40000, "user2", 0 )   /* COPDX */
1665   ROM_LOAD( "copx-d2.6s",   0x00000, 0x40000, CRC(a6732ff9) SHA1(c4856ec77869d9098da24b1bb3d7d58bb74b4cda) )
1666ROM_END
1667
16351668ROM_START( raidndxt )
16361669   ROM_REGION( 0x200000, "user1", 0 ) /* v30 main cpu */
16371670   ROM_LOAD32_BYTE("1d.u1210", 0x000000, 0x80000, CRC(14d725fc) SHA1(f12806f64f069fdc4ee29b309a32f7ca00b36f93) )
r7640r7641
23082341GAME( 1993, raidndx,  0,       raiden2,  raidendx, raiden2,  ROT270, "Seibu Kaihatsu", "Raiden DX (set 1)", GAME_NOT_WORKING|GAME_NO_SOUND)
23092342GAME( 1993, raidndxm, raidndx, raiden2,  raidendx, raiden2,  ROT270, "Seibu Kaihatsu", "Raiden DX (Metrotainment license)", GAME_NOT_WORKING|GAME_NO_SOUND)
23102343GAME( 1993, raidndxj, raidndx, raiden2,  raidendx, raiden2,  ROT270, "Seibu Kaihatsu", "Raiden DX (Japan)", GAME_NOT_WORKING|GAME_NO_SOUND)
2344GAME( 1993, raidndxu, raidndx, raiden2,  raidendx, raiden2,  ROT270, "Seibu Kaihatsu", "Raiden DX (US, Fabtek license)", GAME_NOT_WORKING|GAME_NO_SOUND)
23112345GAME( 1993, raidndxt, raidndx, raiden2,  raidendx, raiden2,  ROT270, "Seibu Kaihatsu", "Raiden DX (Tuning license)", GAME_NOT_WORKING|GAME_NO_SOUND)
23122346GAME( 1993, zeroteam, 0,       raiden2,  raiden2,  raiden2,  ROT0,   "Seibu Kaihatsu", "Zero Team (set 1)", GAME_NOT_WORKING|GAME_NO_SOUND)
23132347GAME( 1993, zeroteama,zeroteam,raiden2,  raiden2,  raiden2,  ROT0,   "Seibu Kaihatsu", "Zero Team (set 2)", GAME_NOT_WORKING|GAME_NO_SOUND)
src/mame/drivers/berzerk.c
r7640r7641
1515#include "sound/s14001a.h"
1616#include "video/resnet.h"
1717
18
1918#define MONITOR_TYPE_PORT_TAG ("MONITOR_TYPE")
2019
2120#define MASTER_CLOCK            (XTAL_10MHz)
r7640r7641
9796 *
9897 *************************************/
9998
100static void vpos_to_vysnc_chain_counter(int vpos, UINT8 *counter, UINT8 *v256)
99static void vpos_to_vsync_chain_counter(int vpos, UINT8 *counter, UINT8 *v256)
101100{
102101   /* convert from a vertical position to the actual values on the vertical sync counters */
103102   *v256 = ((vpos < VBEND) || (vpos >= VBSTART));
r7640r7641
116115}
117116
118117
119static int vysnc_chain_counter_to_vpos(UINT8 counter, UINT8 v256)
118static int vsync_chain_counter_to_vpos(UINT8 counter, UINT8 v256)
120119{
121120   /* convert from the vertical sync counters to an actual vertical position */
122121   int vpos;
r7640r7641
167166   next_counter = irq_trigger_counts[next_irq_number];
168167   next_v256 = irq_trigger_v256s[next_irq_number];
169168
170   next_vpos = vysnc_chain_counter_to_vpos(next_counter, next_v256);
169   next_vpos = vsync_chain_counter_to_vpos(next_counter, next_v256);
171170   timer_adjust_oneshot(irq_timer, video_screen_get_time_until_pos(machine->primary_screen, next_vpos, 0), next_irq_number);
172171}
173172
r7640r7641
180179
181180static void start_irq_timer(running_machine *machine)
182181{
183   int vpos = vysnc_chain_counter_to_vpos(irq_trigger_counts[0], irq_trigger_v256s[0]);
182   int vpos = vsync_chain_counter_to_vpos(irq_trigger_counts[0], irq_trigger_v256s[0]);
184183   timer_adjust_oneshot(irq_timer, video_screen_get_time_until_pos(machine->primary_screen, vpos, 0), 0);
185184}
186185
r7640r7641
244243   next_counter = nmi_trigger_counts[next_nmi_number];
245244   next_v256 = nmi_trigger_v256s[next_nmi_number];
246245
247   next_vpos = vysnc_chain_counter_to_vpos(next_counter, next_v256);
246   next_vpos = vsync_chain_counter_to_vpos(next_counter, next_v256);
248247   timer_adjust_oneshot(nmi_timer, video_screen_get_time_until_pos(machine->primary_screen, next_vpos, 0), next_nmi_number);
249248}
250249
r7640r7641
257256
258257static void start_nmi_timer(running_machine *machine)
259258{
260   int vpos = vysnc_chain_counter_to_vpos(nmi_trigger_counts[0], nmi_trigger_v256s[0]);
259   int vpos = vsync_chain_counter_to_vpos(nmi_trigger_counts[0], nmi_trigger_v256s[0]);
261260   timer_adjust_oneshot(nmi_timer, video_screen_get_time_until_pos(machine->primary_screen, vpos, 0), 0);
262261}
263262
r7640r7641
378377   UINT8 counter;
379378   UINT8 v256;
380379
381   vpos_to_vysnc_chain_counter(video_screen_get_vpos(space->machine->primary_screen), &counter, &v256);
380   vpos_to_vsync_chain_counter(video_screen_get_vpos(space->machine->primary_screen), &counter, &v256);
382381
383382   return (!intercept << 7) | v256;
384383}
r7640r7641
526525static READ8_HANDLER( berzerk_audio_r )
527526{
528527   running_device *device = devtag_get_device(space->machine, "speech");
529   return ((offset == 4) && !s14001a_bsy_r(device)) ? 0x40 : 0x00;
528   switch (offset)
529   {
530   /* offset 4 reads from the S14001A */
531   case 4:
532      return (!s14001a_bsy_r(device)) ? 0x40 : 0x00;
533   /* offset 6 is open bus */
534   case 6:
535      logerror("attempted read from berzerk audio reg 6 (sfxctrl)!\n");
536      return 0;
537   /* everything else reads from the 6840 */
538   default:
539      return exidy_sh6840_r(space, offset);
540   }
530541}
531542
532543
r7640r7641
584595   AM_RANGE(0x4b, 0x4b) AM_READNOP AM_WRITE(magicram_control_w)
585596   AM_RANGE(0x4c, 0x4c) AM_READWRITE(nmi_enable_r, nmi_enable_w)
586597   AM_RANGE(0x4d, 0x4d) AM_READWRITE(nmi_disable_r, nmi_disable_w)
587   AM_RANGE(0x4e, 0x4e) AM_READ(intercept_v256_r) AM_WRITENOP
598   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
588599   AM_RANGE(0x4f, 0x4f) AM_READNOP AM_WRITE(irq_enable_w)
589   AM_RANGE(0x50, 0x57) AM_NOP /* second sound board, but not used */
600   AM_RANGE(0x50, 0x57) AM_NOP /* second sound board, initialized but not used */
590601   AM_RANGE(0x58, 0x5f) AM_NOP
591602   AM_RANGE(0x60, 0x60) AM_MIRROR(0x18) AM_READ_PORT("F3") AM_WRITENOP
592603   AM_RANGE(0x61, 0x61) AM_MIRROR(0x18) AM_READ_PORT("F2") AM_WRITENOP
r7640r7641
624635   PORT_DIPSETTING(    0x05, DEF_STR( 1C_6C ) ) \
625636   PORT_DIPSETTING(    0x06, DEF_STR( 1C_7C ) ) \
626637   PORT_DIPSETTING(    0x07, "1 Coin/10 Credits" ) \
627   PORT_DIPSETTING(    0x08, "1 Coin/14 Credits" ) \
628   PORT_BIT( 0xf0, IP_ACTIVE_LOW,  IPT_UNUSED )
638   PORT_DIPSETTING(    0x08, "1 Coin/14 Credits" )
629639
630640
631static INPUT_PORTS_START( common )
641static INPUT_PORTS_START( joystick ) // used on all games except moonwarp
632642   PORT_START("P1")
633643   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
634644   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
r7640r7641
637647   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
638648   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
639649
640   PORT_START("SYSTEM")
641   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
642   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
643   PORT_BIT( 0x1c, IP_ACTIVE_LOW, IPT_UNUSED )
644   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 )
645   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
646   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
647
648650   PORT_START("P2")
649651   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
650652   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
r7640r7641
655657   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) )
656658   PORT_DIPSETTING(    0x80, DEF_STR( Upright ) )
657659   PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
660INPUT_PORTS_END
658661
662static INPUT_PORTS_START( common ) // used on all games
663   PORT_START("SYSTEM")
664   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
665   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
666   PORT_BIT( 0x1c, IP_ACTIVE_LOW, IPT_UNUSED )
667   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 )
668   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
669   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
670
659671   /* fake port for monitor type */
660672   PORT_START(MONITOR_TYPE_PORT_TAG)
661673   PORT_CONFNAME( 0x01, 0x00, "Monitor Type" )
662674   PORT_CONFSETTING(    0x00, "Wells-Gardner" )
663675   PORT_CONFSETTING(    0x01, "Electrohome" )
664676   PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
677
678   PORT_START("SW2")
679   /* port for the 'bookkeeping reset' and 'bookkeeping' buttons;
680     * The 'bookkeeping reset' button is an actual button on the zpu-1000 and
681     * zpu-1001 pcbs, labeled 'S2' or 'SW2'. It is wired to bit 0.
682     * * pressing it while high scores are displayed will give a free game
683     *   without adding any coin info to the bookkeeping info in nvram.
684     * The 'bookkeeping' button is wired to the control panel, usually hidden
685     * underneath or only accessible through the coin door. Wired to bit 7.
686     * * It displays various bookkeeping statistics when pressed sequentially.
687     *   Pressing P1 fire (according to the manual) when stats are displayed
688     *   will clear the stat shown on screen.
689     */
690   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Free Game (not logged in bookkeeping)")
691   PORT_BIT( 0x7e, IP_ACTIVE_LOW,  IPT_UNUSED )
692   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_NAME("Bookkeeping") PORT_CODE(KEYCODE_F1)
665693INPUT_PORTS_END
666694
667695static INPUT_PORTS_START( berzerk )
696   PORT_INCLUDE( joystick )
668697   PORT_INCLUDE( common )
669698
670699   PORT_START("F2")
r7640r7641
694723
695724   PORT_START("F4")
696725   BERZERK_COINAGE(1, F4)
726   PORT_BIT( 0xf0, IP_ACTIVE_LOW,  IPT_UNUSED )
697727
698728   PORT_START("F5")
699729   BERZERK_COINAGE(2, F5)
730   PORT_BIT( 0xf0, IP_ACTIVE_LOW,  IPT_UNUSED )
700731
701732   PORT_START("F6")
702733   BERZERK_COINAGE(3, F6)
734   PORT_BIT( 0xf0, IP_ACTIVE_LOW,  IPT_UNUSED )
735INPUT_PORTS_END
703736
704   PORT_START("SW2")
705   PORT_DIPNAME( 0x01, 0x00, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:1")
706   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
707   PORT_DIPSETTING(    0x01, DEF_STR( On ) )
708   PORT_BIT( 0x7e, IP_ACTIVE_LOW,  IPT_UNUSED )
709   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Stats") PORT_CODE(KEYCODE_F1)
737// this set has German speech roms, so default the language to German
738static INPUT_PORTS_START( berzerkg )
739   PORT_INCLUDE( berzerk )
740
741   PORT_MODIFY("F3")
742   PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Language ) ) PORT_DIPLOCATION("F3:7,8")
743   PORT_DIPSETTING(    0x00, DEF_STR( English ) )
744   PORT_DIPSETTING(    0x40, DEF_STR( German ) )
745   PORT_DIPSETTING(    0x80, DEF_STR( French ) )
746   PORT_DIPSETTING(    0xc0, DEF_STR( Spanish ) )
710747INPUT_PORTS_END
711748
712
713749static INPUT_PORTS_START( frenzy )
750   PORT_INCLUDE( joystick )
714751   PORT_INCLUDE( common )
715752
716753   PORT_MODIFY("SYSTEM")
717   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
754   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) // frenzy lacks coin 3
718755
719756   PORT_START("F2")
720757   /* Bit 0 does some more hardware tests. According to the manual, both bit 0 & 1 must be:
721758       - ON for Signature Analysis (S.A.)
722759       - OFF for game operation     */
723   PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )   // F2:1,2
760   //PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )  // F2:1,2
761   PORT_DIPNAME( 0x03, 0x00, "Hardware Tests" ) PORT_DIPLOCATION("F2:1,2")
762   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
763   PORT_DIPSETTING(    0x01, "Color test" )
764   PORT_DIPSETTING(    0x02, DEF_STR( Unknown ) )
765   PORT_DIPSETTING(    0x03, "Signature Analysis" )
724766   PORT_DIPNAME( 0x04, 0x00, "Input Test Mode" ) PORT_CODE(KEYCODE_F2) PORT_TOGGLE PORT_DIPLOCATION("F2:3")
725767   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
726768   PORT_DIPSETTING(    0x04, DEF_STR( On ) )
727769   PORT_DIPNAME( 0x08, 0x00, "Crosshair Pattern" ) PORT_CODE(KEYCODE_F4) PORT_TOGGLE PORT_DIPLOCATION("F2:4")
728770   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
729771   PORT_DIPSETTING(    0x08, DEF_STR( On ) )
730   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )      // F2:5,6,7,8
772   PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_DIPLOCATION("F2:5,6,7,8")
731773
732774   PORT_START("F3")
733775   PORT_DIPNAME( 0x0f, 0x03, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("F3:1,2,3,4")
r7640r7641
747789   PORT_DIPSETTING(    0x0e, "14000" )
748790   PORT_DIPSETTING(    0x0f, "15000" )
749791   PORT_DIPSETTING(    0x00, DEF_STR( None ) )
750   PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_UNUSED )   // F3:5,6
792   PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_DIPLOCATION("F3:5,6")
751793   PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("F3:7,8")
752794   PORT_DIPSETTING(    0x00, DEF_STR( English ) )
753795   PORT_DIPSETTING(    0x40, DEF_STR( German ) )
r7640r7641
756798
757799   /* The following 3 ports use all 8 bits, but I didn't feel like adding all 256 values :-) */
758800   PORT_START("F4")
759   PORT_DIPNAME( 0x0f, 0x01, "Coin Multiplier" ) PORT_DIPLOCATION("F4:1,2,3,4")   // F4:1,8
801   PORT_DIPNAME( 0xff, 0x01, "Coin Multiplier" ) PORT_DIPLOCATION("F4:1,2,3,4,5,6,7,8")
760802   PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
761803   PORT_DIPSETTING(    0x01, "1" )
762804   PORT_DIPSETTING(    0x02, "2" )
r7640r7641
773815   PORT_DIPSETTING(    0x0d, "13" )
774816   PORT_DIPSETTING(    0x0e, "14" )
775817   PORT_DIPSETTING(    0x0f, "15" )
776   PORT_BIT( 0xf0, IP_ACTIVE_HIGH,  IPT_UNUSED )
818   PORT_DIPSETTING(    0xff, "255" )
777819
778820   PORT_START("F5")
779   PORT_DIPNAME( 0x0f, 0x01, "Coins/Credit A" ) PORT_DIPLOCATION("F5:1,2,3,4")   // F5:1,8
780   /*PORT_DIPSETTING(    0x00, "0" )    Can't insert coins  */
821   PORT_DIPNAME( 0xff, 0x01, "Coins/Credit A" ) PORT_DIPLOCATION("F5:1,2,3,4,5,6,7,8")
822   PORT_DIPSETTING(    0x00, "0 (invalid)" ) //   Can't insert coins
781823   PORT_DIPSETTING(    0x01, "1" )
782824   PORT_DIPSETTING(    0x02, "2" )
783825   PORT_DIPSETTING(    0x03, "3" )
r7640r7641
793835   PORT_DIPSETTING(    0x0d, "13" )
794836   PORT_DIPSETTING(    0x0e, "14" )
795837   PORT_DIPSETTING(    0x0f, "15" )
796   PORT_BIT( 0xf0, IP_ACTIVE_HIGH,  IPT_UNUSED )
838   PORT_DIPSETTING(    0xff, "255" )
797839
798840   PORT_START("F6")
799   PORT_DIPNAME( 0x0f, 0x01, "Coins/Credit B" ) PORT_DIPLOCATION("F6:1,2,3,4")   // F6:1,8
800   /*PORT_DIPSETTING(    0x00, "0" )    Can't insert coins  */
841   PORT_DIPNAME( 0xff, 0x01, "Coins/Credit B" ) PORT_DIPLOCATION("F6:1,2,3,4,5,6,7,8")
842   PORT_DIPSETTING(    0x00, "0 (invalid)" ) //   Can't insert coins
801843   PORT_DIPSETTING(    0x01, "1" )
802844   PORT_DIPSETTING(    0x02, "2" )
803845   PORT_DIPSETTING(    0x03, "3" )
r7640r7641
813855   PORT_DIPSETTING(    0x0d, "13" )
814856   PORT_DIPSETTING(    0x0e, "14" )
815857   PORT_DIPSETTING(    0x0f, "15" )
816   PORT_BIT( 0xf0, IP_ACTIVE_HIGH,  IPT_UNUSED )
858   PORT_DIPSETTING(    0xff, "255" )
859INPUT_PORTS_END
817860
818   PORT_START("SW2")
819   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_DIPLOCATION("SW2:1")
820   PORT_BIT( 0x7e, IP_ACTIVE_LOW,  IPT_UNUSED )
821   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Stats") PORT_CODE(KEYCODE_F1)
861static READ8_HANDLER( moonwarp_p1_r )
862{
863   // This seems to be the same type of dial as the later 'moon war 2' set uses
864   // see http://www.cityofberwyn.com/schematics/stern/MoonWar_opto.tiff for schematic
865   // I.e. a 74ls161 counts from 0 to 15 which is the absolute number of bars passed on the quadrature
866   // one difference is it lacks the strobe input (does it?), which if not active causes
867   // the dial input to go open bus. This is used in moon war 2 to switch between player 1
868   // and player 2 dials, which share a single port. moonwarp uses separate ports for the dials.
869   signed char dialread = input_port_read(space->machine,"P1_DIAL");
870   static int counter_74ls161 = 0;
871   static int direction = 0;
872   UINT8 ret;
873   UINT8 buttons = (input_port_read(space->machine,"P1")&0xe0);
874   if (dialread < 0) direction = 0;
875   else if (dialread > 0) direction = 0x10;
876   counter_74ls161 += abs(dialread);
877   counter_74ls161 &= 0xf;
878   ret = counter_74ls161 | direction | buttons;
879   //fprintf(stderr, "dialread1: %02x, counter_74ls161: %02x, spinner ret is %02x\n", dialread, counter_74ls161, ret);
880   return ret;
881}
882
883static READ8_HANDLER( moonwarp_p2_r )
884{
885   // same as above, but for player 2 in cocktail mode
886   signed char dialread = input_port_read(space->machine,"P2_DIAL");
887   static int counter_74ls161 = 0;
888   static int direction = 0;
889   UINT8 ret;
890   UINT8 buttons = (input_port_read(space->machine,"P2")&0xe0);
891   if (dialread < 0) direction = 0;
892   else if (dialread > 0) direction = 0x10;
893   counter_74ls161 += abs(dialread);
894   counter_74ls161 &= 0xf;
895   ret = counter_74ls161 | direction | buttons;
896   //fprintf(stderr, "dialread2: %02x, counter_74ls161: %02x, spinner ret is %02x\n", dialread, counter_74ls161, ret);
897   return ret;
898}
899
900static INPUT_PORTS_START( moonwarp )
901   PORT_INCLUDE( common )
902
903   PORT_MODIFY("SYSTEM")
904   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // is wired high for upright harness, low for cocktail; if high, cocktail dipswitch is ignored.
905   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) // Hyper flip button is common for both players in cocktail mode.
906
907   PORT_START("P1")
908   //PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_SPECIAL ) // spinner/dial
909   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 )
910   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
911   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
912
913   PORT_START("P1_DIAL")
914    PORT_BIT( 0xff, 0x0, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(4) PORT_RESET
915
916   PORT_START("P2")
917   //PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_COCKTAIL // spinner/dial
918   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
919   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
920   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
921
922   PORT_START("P2_DIAL")
923    PORT_BIT( 0xff, 0x0, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(4) PORT_COCKTAIL PORT_RESET
924
925   PORT_START("F2")
926   PORT_DIPNAME( 0x03, 0x00, "Hardware Tests" ) PORT_DIPLOCATION("F2:1,2")
927   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
928   PORT_DIPSETTING(    0x01, "Color test" )
929   PORT_DIPSETTING(    0x02, DEF_STR( Unknown ) )
930   PORT_DIPSETTING(    0x03, "Signature Analysis" )
931   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F2:3")
932   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
933   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
934   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F2:4")
935   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
936   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
937   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F2:5")
938   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
939   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
940   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F2:6")
941   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
942   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
943   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F2:7")
944   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
945   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
946   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F2:8")
947   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
948   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
949
950   PORT_START("F3")
951   PORT_DIPNAME( 0x01, 0x00, "Input Test Mode" ) PORT_CODE(KEYCODE_F2) PORT_TOGGLE PORT_DIPLOCATION("F3:1")
952   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
953   PORT_DIPSETTING(    0x01, DEF_STR( On ) )
954   PORT_DIPNAME( 0x02, 0x00, "Crosshair Pattern" ) PORT_CODE(KEYCODE_F4) PORT_TOGGLE PORT_DIPLOCATION("F3:2")
955   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
956   PORT_DIPSETTING(    0x02, DEF_STR( On ) )
957   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F3:3")
958   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
959   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
960   PORT_DIPNAME( 0x08, 0x00, "Spinner Direction" ) PORT_DIPLOCATION("F3:4")
961   PORT_DIPSETTING(    0x08, DEF_STR( Reverse ) )
962   PORT_DIPSETTING(    0x00, DEF_STR( Standard ) )
963   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F3:5")
964   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
965   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
966   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F3:6")
967   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
968   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
969   PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("F3:7,8")
970   PORT_DIPSETTING(    0x00, DEF_STR( English ) )
971   PORT_DIPSETTING(    0x40, DEF_STR( German ) )
972   PORT_DIPSETTING(    0x80, DEF_STR( French ) )
973   PORT_DIPSETTING(    0xc0, DEF_STR( Spanish ) )
974
975   PORT_START("F4")
976   BERZERK_COINAGE(1, F4)
977   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F4:5")
978   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
979   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
980   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F4:6")
981   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
982   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
983   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F4:7")
984   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
985   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
986   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F4:8")
987   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
988   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
989
990   PORT_START("F5")
991   BERZERK_COINAGE(2, F5)
992   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F5:5")
993   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
994   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
995   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F5:6")
996   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
997   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
998   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F5:7")
999   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1000   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1001   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("F5:8")
1002   PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
1003   PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
1004
1005   PORT_START("F6")
1006   BERZERK_COINAGE(3, F6)
1007   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F6:5")
1008   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1009   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1010   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F6:6") // enemy spawn rate?
1011   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
1012   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1013   PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("F6:7,8") // difficulties might be in the wrong order but 0xc0 is clearly the hardest
1014   PORT_DIPSETTING(    0x00, DEF_STR( Very_Easy ) )
1015   PORT_DIPSETTING(    0x40, DEF_STR( Easy ) )
1016   PORT_DIPSETTING(    0x80, DEF_STR( Normal ) )
1017   PORT_DIPSETTING(    0xc0, DEF_STR( Hard ) )
1018
8221019INPUT_PORTS_END
8231020
8241021
825
8261022/*************************************
8271023 *
8281024 *  Machine drivers
r7640r7641
9081104   ROM_LOAD( "2c",           0x0800, 0x0800, CRC(d2b6324e) SHA1(20a6611ad6ec19409ac138bdae7bdfaeab6c47cf) )
9091105ROM_END
9101106
1107ROM_START( berzerkg )
1108   ROM_REGION( 0x10000, "maincpu", 0 )
1109   ROM_LOAD( "cpu rom 00.bin",      0x0000, 0x0800, CRC(77923a9e) SHA1(3760800b7aa1245f2141897b2406f0f5af5a8d71) )
1110   ROM_LOAD( "cpu rom 01.bin",      0x1000, 0x0800, CRC(19bb3aac) SHA1(11341521fd880d55ea01bceb4a321ec571f0b759) )
1111   ROM_LOAD( "cpu rom 02.bin",      0x1800, 0x0800, CRC(b0888ff7) SHA1(ac76400482fe37b6c8e309cd9b10855dac86ed24) )
1112   ROM_LOAD( "cpu rom 03.bin",      0x2000, 0x0800, CRC(e23239a9) SHA1(a0505efdee4cb1962243638c641e94983673f70f) )
1113   ROM_LOAD( "cpu rom 04.bin",      0x2800, 0x0800, CRC(651b31b7) SHA1(890f424a5a73a95af642435c1b0cca78a9413aae) )
1114   ROM_LOAD( "cpu rom 05.bin",      0x3000, 0x0800, CRC(8a403bba) SHA1(686a9b58a245df6c947d14991a2e4cbaf511e2ca) )
1115   ROM_FILL( 0x3800, 0x0800, 0xff )
9111116
1117   ROM_REGION( 0x01000, "speech", 0 ) /* voice data */
1118   ROM_LOAD( "snd rom 1c.bin",           0x0000, 0x0800, CRC(fc1da15f) SHA1(f759a017d9e95acf0e1d35b16d8820acee7d7e3d) )   /* VSU-1000 board */
1119   ROM_LOAD( "snd rom 2c.bin",           0x0800, 0x0800, CRC(7f6808fb) SHA1(8a9c43597f924221f68d1b31e033f1dc492cddc5) )
1120ROM_END
1121
1122
1123
9121124ROM_START( frenzy )
9131125   ROM_REGION( 0x10000, "maincpu", 0 )
9141126   ROM_LOAD( "1c-0",         0x0000, 0x1000, CRC(abdd25b8) SHA1(e6a3ab826b51b2c6ddd63d55681848fccad800dd) )
r7640r7641
9271139
9281140
9291141/*
930   The original / prototype version of moon war appears to run on Frenzy hardware, however the only board found
931   had been stripped for parts, leaving only the sound ROMs.
1142   The original / prototype version of moon war runs on Frenzy Hardware.
9321143
9331144   The more common version of Moon War runs on modified Super Cobra (scobra.c) hardware and is often called
934   'Moon War 2' because it is the second version, and many of the PCBs are labeled as such
1145   'Moon War 2' because it is the second version, and many of the PCBs are labeled as such.
1146
1147   So far only 2 original boards of this have been found, one with only the sound roms on it, and the other
1148   with only the program roms on it.  This set is a combination of dumps from those two boards, so there
1149   is a small chance they could be mismatched.
9351150*/
9361151ROM_START( moonwarp )
9371152   ROM_REGION( 0x10000, "maincpu", 0 )
938   ROM_LOAD( "1c",         0x0000, 0x1000, NO_DUMP )
939   /*ROM_LOAD( "3c",         0x?000, 0x?000, NO_DUMP ) */ /* likely unused */
940   ROM_LOAD( "1d",         0x1000, 0x1000, NO_DUMP )
941   ROM_LOAD( "3d",         0x2000, 0x1000, NO_DUMP )
942   ROM_LOAD( "5d",         0x3000, 0x1000, NO_DUMP )
943   ROM_LOAD( "6d",         0xc000, 0x1000, NO_DUMP )
1153   ROM_LOAD( "1d.bin",      0x0000, 0x1000, CRC(75470634) SHA1(1a811fef39724fd227e06b694841d3dad5659622) )
1154   ROM_LOAD( "3d.bin",      0x1000, 0x1000, CRC(a9d046dc) SHA1(88afccd09d2809cafd12dd40ab3be77e3707cfc5) )
1155   ROM_LOAD( "5d.bin",      0x2000, 0x1000, CRC(bf671737) SHA1(cdfae1eb8995c2251813cc5633fc809aa9e6a36f) )
1156   ROM_LOAD( "6d.bin",      0x3000, 0x1000, CRC(cef2d697) SHA1(5c31c6e7002f0d944b3028d1b804480acf3af042) )
1157   ROM_LOAD( "5c.bin",      0xc000, 0x1000, CRC(a3d551ab) SHA1(a32352727b5475a6ec6c495c55f01ccd6e024f98) )
9441158
9451159   ROM_REGION( 0x01000, "speech", 0 ) /* voice data */
9461160   ROM_LOAD( "moonwar.1c.bin",           0x0000, 0x0800, CRC(9e9a653f) SHA1(cf49a38ef343ace271ba1e5dde38bd8b9c0bd876) )   /* VSU-1000 board */
9471161   ROM_LOAD( "moonwar.2c.bin",           0x0800, 0x0800, CRC(73fd988d) SHA1(08a2aeb4d87eee58e38e4e3f749a95f2308aceb0) )    /* ditto */
9481162
9491163   ROM_REGION( 0x0020, "proms", 0 )
950   ROM_LOAD( "prom.6e",        0x0000, 0x0020, CRC(56bffba3) SHA1(c8e24f6361c50bcb4c9d3f39cdaf4172c2a2b318) ) /* address decoder/rom select prom */
1164   ROM_LOAD( "n82s123 po. e6 select decoder",      0x0000, 0x0020, CRC(4471ca5d) SHA1(ba8dca2ec076818f8ad8c17b15c77965e36fa05e) ) /* address decoder/rom select prom - from board with prg roms, same as Frenzy*/
1165   ROM_LOAD( "prom.6e",        0x0000, 0x0020, CRC(56bffba3) SHA1(c8e24f6361c50bcb4c9d3f39cdaf4172c2a2b318) ) /* address decoder/rom select prom - from the sound rom only set, is it bad? */
9511166ROM_END
9521167
1168static DRIVER_INIT( moonwarp )
1169{
1170   const address_space *io = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO);
1171   memory_install_read8_handler (io, 0x48, 0x48, 0, 0, moonwarp_p1_r);
1172   memory_install_read8_handler (io, 0x4a, 0x4a, 0, 0, moonwarp_p2_r);
1173}
9531174
954
9551175/*************************************
9561176 *
9571177 *  Game drivers
r7640r7641
9601180
9611181GAME( 1980, berzerk,  0,       berzerk, berzerk, 0, ROT0, "Stern", "Berzerk (set 1)", 0 )
9621182GAME( 1980, berzerk1, berzerk, berzerk, berzerk, 0, ROT0, "Stern", "Berzerk (set 2)", 0 )
1183GAME( 1980, berzerkg, berzerk, berzerk, berzerkg,0, ROT0, "Stern", "Berzerk (German Speech)", 0 )
9631184GAME( 1981, frenzy,   0,       frenzy,  frenzy,  0, ROT0, "Stern", "Frenzy", 0 )
964GAME( 1981, moonwarp, 0,       frenzy,  frenzy, 0, ROT0, "Stern", "Moon War (prototype on Frenzy hardware)", GAME_NOT_WORKING )
1185GAME( 1981, moonwarp, 0,       frenzy,  moonwarp,moonwarp, ROT0, "Stern", "Moon War (prototype on Frenzy hardware)", 0)
src/mame/drivers/model3.c
r7640r7641
32653265   ROM_FILL( 0x000000, 0x80000, 0 )
32663266ROM_END
32673267
3268ROM_START( vs299a )   /* Step 2.0 */
3269   ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
3270   // CROM
3271   ROM_LOAD64_WORD_SWAP( "epr-21535a.17",  0x400006, 0x100000, CRC(8e4ec341) SHA1(973c71e7a48e728cbcb2465b56e90669fee0ec53) )
3272   ROM_LOAD64_WORD_SWAP( "epr-21536a.18",  0x400004, 0x100000, CRC(95d49d6e) SHA1(80b6655c1ee0f76620e3e2e9425719819a96ccf7) )
3273   ROM_LOAD64_WORD_SWAP( "epr-21537a.19",  0x400002, 0x100000, CRC(f72a8f2f) SHA1(c0ce6b0e3991bd64b4dc150313a9ffec17fcd96b) )
3274   ROM_LOAD64_WORD_SWAP( "epr-21538a.20",  0x400000, 0x100000, CRC(42beba70) SHA1(71073145841faeab670aedd10d7fda884662f4f3) )
3275
3276   // CROM0
3277   ROM_LOAD64_WORD_SWAP( "mpr-21497.1",   0x800006, 0x400000, CRC(8ea759a1) SHA1(0d444fa360d93f48e5d6607362a231f97a7685d4) )
3278   ROM_LOAD64_WORD_SWAP( "mpr-21498.2",   0x800004, 0x400000, CRC(4f53d6e0) SHA1(c8cd14f46d4ac7afdf55035a20d2e9a5ce2b6cde) )
3279   ROM_LOAD64_WORD_SWAP( "mpr-21499.3",   0x800002, 0x400000, CRC(2cc4c1f1) SHA1(fd0fd747368e798095119a21d82f14778aeaa45e) )
3280   ROM_LOAD64_WORD_SWAP( "mpr-21500.4",   0x800000, 0x400000, CRC(8c43964b) SHA1(cf3a6e9402f9ba532fca73f6838478558fb9a3ba) )
3281
3282   // CROM1
3283   ROM_LOAD64_WORD_SWAP( "mpr-21501.5",  0x1800006, 0x400000, CRC(08bc2185) SHA1(6c4c977f68a73d605bdacdc0d76ca89bc7030c04) )
3284   ROM_LOAD64_WORD_SWAP( "mpr-21502.6",  0x1800004, 0x400000, CRC(921486be) SHA1(bb1261272992cf86e83e0c788788765f05b43bbf) )
3285   ROM_LOAD64_WORD_SWAP( "mpr-21503.7",  0x1800002, 0x400000, CRC(c9e1de6b) SHA1(d200c3da2c9bc6d4ed60dfa60a77056d25b19037) )
3286   ROM_LOAD64_WORD_SWAP( "mpr-21504.8",  0x1800000, 0x400000, CRC(7aae557e) SHA1(2128d7dfa52e639858d37eb6100875b9ce3d056f) )
3287
3288   // CROM2
3289   ROM_LOAD64_WORD_SWAP( "mpr-21505.9",  0x2800006, 0x400000, CRC(e169ff72) SHA1(9d407b424403261a224ea15b9476eba16406c4a4) )
3290   ROM_LOAD64_WORD_SWAP( "mpr-21506.10", 0x2800004, 0x400000, CRC(2c1477c7) SHA1(81ab7d9cef5127e1f0e16f9a94a9ea2acc4530a4) )
3291   ROM_LOAD64_WORD_SWAP( "mpr-21507.11", 0x2800002, 0x400000, CRC(1d8eb68b) SHA1(634693f066059c738526913498bb18be2f7cd086) )
3292   ROM_LOAD64_WORD_SWAP( "mpr-21508.12", 0x2800000, 0x400000, CRC(2e8f798e) SHA1(8298df90101dd5850db8fccb7661ca2bc6806b3f) )
3293
3294   // CROM3
3295   ROM_LOAD64_WORD_SWAP( "mpr-21509.13", 0x3800006, 0x400000, CRC(9a65e6b4) SHA1(e96c4bc2782b73490dffd5dcb11b9020077b11a3) )
3296   ROM_LOAD64_WORD_SWAP( "mpr-21510.14", 0x3800004, 0x400000, CRC(f47489a4) SHA1(8412505002628d7ae3ab766a13e2068a018f3bf3) )
3297   ROM_LOAD64_WORD_SWAP( "mpr-21511.15", 0x3800002, 0x400000, CRC(5ad9660c) SHA1(da387449292322a89af1cb6746d0fb8cea17575f) )
3298   ROM_LOAD64_WORD_SWAP( "mpr-21512.16", 0x3800000, 0x400000, CRC(7cb2b05c) SHA1(16edc6642c74d9cef883559ca6ec562d985a43d6) )
3299
3300   // mirror CROM0 to CROM
3301   ROM_COPY("user1", 0x800000, 0x000000, 0x400000)
3302
3303   ROM_REGION( 0x1000000, "user3", 0 )  /* Video ROMs Part 1 */
3304   ROM_LOAD_VROM( "mpr-21515.26",     0x000002, 0x200000, CRC(8ce9910b) SHA1(7a0d0696e4456d9ebf131041917c5214b7d2e3ec) )
3305   ROM_LOAD_VROM( "mpr-21516.27",     0x000000, 0x200000, CRC(8971a753) SHA1(00dfdb83a65f4fde337618c346157bb89f398531) )
3306   ROM_LOAD_VROM( "mpr-21517.28",     0x000006, 0x200000, CRC(55a4533b) SHA1(b5701bbf7780bb9fc386cef4c1835606ab792f91) )
3307   ROM_LOAD_VROM( "mpr-21518.29",     0x000004, 0x200000, CRC(4134026c) SHA1(2dfe1cbb354affe465c31a18c3ffb83a9bf555c9) )
3308   ROM_LOAD_VROM( "mpr-21519.30",     0x00000a, 0x200000, CRC(ef6757de) SHA1(d41bbfcc551a4589bac577e311c67f2cba0a49aa) )
3309   ROM_LOAD_VROM( "mpr-21520.31",     0x000008, 0x200000, CRC(c53be8cc) SHA1(b12dc0327a00b7e056254d2f11f96dbf396a0c91) )
3310   ROM_LOAD_VROM( "mpr-21521.32",     0x00000e, 0x200000, CRC(abb501dc) SHA1(88cb40b0f795e0de1ff56e1f31bf834fad0c7885) )
3311   ROM_LOAD_VROM( "mpr-21522.33",     0x00000c, 0x200000, CRC(e3b79973) SHA1(4b6ca16a23bb3e195ca60bee81b2d069f371ff70) )
3312
3313   ROM_REGION( 0x1000000, "user4", 0 )  /* Video ROMs Part 2 */
3314   ROM_LOAD_VROM( "mpr-21523.34",     0x000002, 0x200000, CRC(fe4d1eac) SHA1(d222743d25ca92904ec212c66d03b3e3ff0ddbd9) )
3315   ROM_LOAD_VROM( "mpr-21524.35",     0x000000, 0x200000, CRC(8633b6e9) SHA1(65ec24eb29613831dd28e5338cac14696b0d975d) )
3316   ROM_LOAD_VROM( "mpr-21525.36",     0x000006, 0x200000, CRC(3c490167) SHA1(6fd46049723e0790b2231301cfa23071cd6ff1f6) )
3317   ROM_LOAD_VROM( "mpr-21526.37",     0x000004, 0x200000, CRC(5fe5f9b0) SHA1(c708918cfc60f5fd9f6ec49ec1cd3167f2876e30) )
3318   ROM_LOAD_VROM( "mpr-21527.38",     0x00000a, 0x200000, CRC(10d0fe7e) SHA1(63693b0de43e2eb6efbb3d2dfbe0e2f5bc6810dc) )
3319   ROM_LOAD_VROM( "mpr-21528.39",     0x000008, 0x200000, CRC(4e346a6c) SHA1(ae34038d5bf6f63ec5ad2e8dd8e06db66147c40e) )
3320   ROM_LOAD_VROM( "mpr-21529.40",     0x00000e, 0x200000, CRC(9a731a00) SHA1(eca98b142acc02fb28387675e1cb1bc7e4e59b86) )
3321   ROM_LOAD_VROM( "mpr-21530.41",     0x00000c, 0x200000, CRC(78400d5e) SHA1(9b4546848dbe213f33b02e8ea42743e60a0f763f) )
3322
3323   ROM_REGION( 0x100000, "audiocpu", 0 )   /* 68000 code */
3324   ROM_LOAD16_WORD_SWAP( "epr-21539.21", 0x080000, 0x080000, CRC(a1d3e00e) SHA1(e03bb31967929a12de9ae21923914e0e3bd96aaa) )
3325
3326   ROM_REGION( 0x800000, "samples", 0 )   /* SCSP samples */
3327   ROM_LOAD( "mpr-21513.22", 0x000000, 0x400000, CRC(cca1cc00) SHA1(ba1fa3b8ef3bff7e116901a0a4bd80d2ae4018bf) )
3328   ROM_LOAD( "mpr-21514.24", 0x400000, 0x400000, CRC(6cedd292) SHA1(c1f44715697a8bac9d39926bcd6558ec9a9b2319) )
3329
3330   ROM_REGION( 0x20000, "cpu2", 0 )   /* Z80 code */
3331   ROM_FILL( 0x000000, 0x20000, 0 )
3332
3333   ROM_REGION( 0x800000, "dsb", 0 )   /* DSB samples */
3334   ROM_FILL( 0x000000, 0x800000, 0 )
3335
3336   ROM_REGION( 0x80000, "scsp1", 0 )   /* first SCSP's RAM */
3337   ROM_FILL( 0x000000, 0x80000, 0 )
3338
3339   ROM_REGION( 0x80000, "scsp2", 0 )   /* second SCSP's RAM */
3340   ROM_FILL( 0x000000, 0x80000, 0 )
3341ROM_END
3342
32683343ROM_START( vs299 )   /* Step 2.0 */
32693344   ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
32703345   // CROM
r7640r7641
52395314   rom[(0x603888^4)/4] = 0x60000000;
52405315}
52415316
5317static DRIVER_INIT( vs299a )
5318{
5319   UINT32 *rom = (UINT32*)memory_region(machine, "user1");
5320
5321   DRIVER_INIT_CALL(model3_20);
5322
5323   rom[(0x603868^4)/4] = 0x60000000;
5324   rom[(0x603888^4)/4] = 0x60000000;
5325}
5326
52425327static DRIVER_INIT( vs299 )
52435328{
52445329   UINT32 *rom = (UINT32*)memory_region(machine, "user1");
r7640r7641
52795364   DRIVER_INIT_CALL(model3_20);
52805365
52815366   rom[(0xf0e48^4)/4] = 0x60000000;
5282    rom[(0x043dc^4)/4] = 0x48000090;
5283    rom[(0x029a0^4)/4] = 0x60000000;
5284    rom[(0x02a0c^4)/4] = 0x60000000;
5367   rom[(0x043dc^4)/4] = 0x48000090;
5368   rom[(0x029a0^4)/4] = 0x60000000;
5369   rom[(0x02a0c^4)/4] = 0x60000000;
52855370}
52865371
52875372static DRIVER_INIT( swtrilga )
r7640r7641
54175502GAME( 1998, fvipers2,       0, model3_20, model3,  model3_20, ROT0, "Sega", "Fighting Vipers 2 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND )
54185503GAME( 1998, vs298,          0, model3_20, model3,      vs298, ROT0, "Sega", "Virtua Striker 2 '98 (Step 2.0)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND )
54195504GAME( 1999, vs2v991,        0, model3_20, model3,    vs2v991, ROT0, "Sega", "Virtua Striker 2 '99.1 (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND )
5505GAME( 1999, vs299a,   vs2v991, model3_20, model3,     vs299a, ROT0, "Sega", "Virtua Striker 2 '99 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND )
54205506GAME( 1999, vs299,    vs2v991, model3_20, model3,      vs299, ROT0, "Sega", "Virtua Striker 2 '99", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND )
54215507
54225508/* Model 3 Step 2.1 */
src/mame/drivers/pastelg.c
r7640r7641
4242extern WRITE8_HANDLER( pastelg_clut_w );
4343extern WRITE8_HANDLER( pastelg_romsel_w );
4444extern WRITE8_HANDLER( threeds_romsel_w );
45extern WRITE8_HANDLER( threeds_output_w );
4546extern WRITE8_HANDLER( pastelg_blitter_w );
47extern READ8_HANDLER( threeds_rom_readback_r );
4648extern int pastelg_blitter_src_addr_r(void);
4749
4850
r7640r7641
6365   AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&nb1413m3_nvram) AM_SIZE(&nb1413m3_nvram_size)
6466ADDRESS_MAP_END
6567
68static READ8_HANDLER( pastelg_irq_ack_r )
69{
70   cpu_set_input_line(space->cpu, 0, CLEAR_LINE);
71   return 0;
72}
6673
6774static ADDRESS_MAP_START( pastelg_io_map, ADDRESS_SPACE_IO, 8 )
6875   ADDRESS_MAP_GLOBAL_MASK(0xff)
r7640r7641
7683   AM_RANGE(0xb0, 0xb0) AM_READWRITE(nb1413m3_inputport2_r, pastelg_romsel_w)
7784   AM_RANGE(0xc0, 0xc0) AM_READ(pastelg_sndrom_r)
7885   AM_RANGE(0xc0, 0xcf) AM_WRITE(pastelg_clut_w)
79   AM_RANGE(0xd0, 0xd0) AM_READNOP AM_DEVWRITE("dac", DAC_WRITE)               // unknown
86   AM_RANGE(0xd0, 0xd0) AM_READ(pastelg_irq_ack_r) AM_DEVWRITE("dac", DAC_WRITE)
8087   AM_RANGE(0xe0, 0xe0) AM_READ_PORT("DSWC")
8188ADDRESS_MAP_END
8289
r7640r7641
122129   AM_RANGE(0x90, 0x90) AM_READ_PORT("SYSTEM") AM_WRITE( threeds_romsel_w )
123130   AM_RANGE(0xf0, 0xf6) AM_WRITE(pastelg_blitter_w)
124131   AM_RANGE(0xa0, 0xa0) AM_READWRITE(threeds_inputport1_r, threeds_inputportsel_w)
125   AM_RANGE(0xb0, 0xb0) AM_READ(threeds_inputport2_r)
132   AM_RANGE(0xb0, 0xb0) AM_READ(threeds_inputport2_r) AM_WRITE(threeds_output_w)//writes: bit 3 is coin lockout, bit 1 is coin counter
126133   AM_RANGE(0xc0, 0xcf) AM_WRITE(pastelg_clut_w)
127   AM_RANGE(0xc0, 0xc0) AM_READ_PORT("DSWC")
128   AM_RANGE(0xd0, 0xd0) AM_READNOP AM_DEVWRITE("dac", DAC_WRITE)               // unknown
134   AM_RANGE(0xc0, 0xc0) AM_READ(threeds_rom_readback_r)
135   AM_RANGE(0xd0, 0xd0) AM_READ(pastelg_irq_ack_r) AM_DEVWRITE("dac", DAC_WRITE)
129136ADDRESS_MAP_END
130137
131138static INPUT_PORTS_START( pastelg )
r7640r7641
218225// stops the game hanging..
219226static CUSTOM_INPUT( nb1413m3_hackbusyflag_r )
220227{
221   static int i = 0;
222   i ^= 1;
223   return i;
228   return mame_rand(field->port->machine) & 3;
224229}
225230
226231static INPUT_PORTS_START( threeds )
r7640r7641
375380   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
376381
377382   PORT_START("SYSTEM")
378   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(nb1413m3_hackbusyflag_r, NULL)   // DRAW BUSY
379   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )         //
383   PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(nb1413m3_hackbusyflag_r, NULL)   // DRAW BUSY
380384   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE3 )      // MEMORY RESET
381385   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 )      // ANALYZER
382386   PORT_SERVICE( 0x10, IP_ACTIVE_LOW )               // TEST
r7640r7641
404408   MDRV_CPU_PROGRAM_MAP(pastelg_map)
405409   MDRV_CPU_IO_MAP(pastelg_io_map)
406410//  MDRV_CPU_VBLANK_INT_HACK(nb1413m3_interrupt,96)  // nmiclock not written, chip is 1411M1 instead of 1413M3
407   MDRV_CPU_VBLANK_INT("screen", nb1413m3_interrupt)
411   MDRV_CPU_VBLANK_INT("screen", irq0_line_assert)
408412
409413   MDRV_MACHINE_RESET(nb1413m3)
410414   MDRV_NVRAM_HANDLER(nb1413m3)
r7640r7641
463467   MDRV_CPU_ADD("maincpu", Z80, 19968000/8)   /* 2.496 MHz ? */
464468   MDRV_CPU_PROGRAM_MAP(pastelg_map)
465469   MDRV_CPU_IO_MAP(threeds_io_map)
466   MDRV_CPU_VBLANK_INT("screen", nb1413m3_interrupt)
470   MDRV_CPU_VBLANK_INT("screen", irq0_line_assert)
467471
468472   MDRV_MACHINE_RESET(nb1413m3)
469473   MDRV_NVRAM_HANDLER(nb1413m3)
r7640r7641
541545
542546
543547GAME( 1985, pastelg, 0, pastelg, pastelg, pastelg, ROT0, "Nichibutsu", "Pastel Gal (Japan 851224)", 0 )
544GAME( 1985, 3ds,     0, threeds, threeds, pastelg, ROT0, "Nichibutsu", "Three Ds - Three Dealers Casino House", GAME_IMPERFECT_GRAPHICS )
548GAME( 1985, 3ds,     0, threeds, threeds, pastelg, ROT0, "Nichibutsu", "Three Ds - Three Dealers Casino House", 0 )
src/mame/drivers/namcos22.c
r7640r7641
19601960      else
19611961      {
19621962         memset( namcos22_nvmem, 0x00, namcos22_nvmem_size );
1963         /* TBA: default eprom initialization */
1963         if (memory_region_length(machine, "nvram") == namcos22_nvmem_size)
1964         {
1965            UINT8* nvram = memory_region(machine,"nvram");
1966
1967            for( i=0; i<namcos22_nvmem_size/4; i++ )
1968            {
1969               namcos22_nvmem[i] = (nvram[0+i*4]<<24)|(nvram[1+i*4]<<16)|(nvram[2+i*4]<<8)|nvram[3+i*4];
1970            }
1971         }
19641972      }
19651973   }
19661974}
r7640r7641
36963704   ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
36973705   ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
36983706
3699   ROM_REGION( 0x2000, "user2", 0 )
3700   ROM_LOAD( "cy1eeprm.9e", 0x0000, 0x2000, CRC(4e1d294b) SHA1(954ce04dcdba65214f5d0690ca59264f9090a1d6) ) /* EPROM */
3707   ROM_REGION( 0x2000, "nvram", 0 )
3708//  ROM_LOAD( "cy1eeprm.9e", 0x0000, 0x2000, CRC(4e1d294b) SHA1(954ce04dcdba65214f5d0690ca59264f9090a1d6) ) /* EPROM (dumped?) */
3709   ROM_LOAD( "cybrcomm.nv", 0x0000, 0x2000, CRC(8432c066) SHA1(99d4bfda3f8aec288dbeaf291bce85fe9009a1de) ) /* EPROM (useful defaults) */
37013710ROM_END
37023711
37033712ROM_START( cybrcycc )
r7640r7641
51565165   PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
51575166   PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
51585167
5159   PORT_START("STICKY1")   /* VOLUME1 */
5160   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_SENSITIVITY(   100) PORT_KEYDELTA(4) PORT_PLAYER(1)   /* right joystick: vertical */
5161   PORT_START("STICKY2")   /* VOLUME2 */
5162   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_SENSITIVITY(   100) PORT_KEYDELTA(4) PORT_PLAYER(2)   /* left joystick: vertical */
5163   PORT_START("STICKX1")   /* VOLUME3 */
5164   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_SENSITIVITY(   100) PORT_KEYDELTA(4) PORT_PLAYER(1)   /* right joystick: horizontal */
5165   PORT_START("STICKX2")   /* VOLUME4 */
5166   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_SENSITIVITY(   100) PORT_KEYDELTA(4) PORT_PLAYER(2)   /* left joystick: horizontal */
5168   /* Note(s)
5169       The ranges here are based on the test mode which displays +-224
5170       The nvram is calibrated using these settings.  If the SUBCPU handling changes then these might
5171        end up needing to change again too
5172       Default key arrangement is based on dual-joystick 'Tank' arrangement found in Assault and CyberSled
5173    */
5174   PORT_START("STICKY1")      /* VOLUME 0 */
5175   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_I) PORT_CODE_INC(KEYCODE_K) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: vertical */
5176   PORT_START("STICKY2")      /* VOLUME 0 */
5177   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_E) PORT_CODE_INC(KEYCODE_D) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: vertical */
5178   PORT_START("STICKX1")      /* VOLUME 0 */
5179   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_J) PORT_CODE_INC(KEYCODE_L) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: horizontal */
5180   PORT_START("STICKX2")      /* VOLUME 0 */
5181   PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_S) PORT_CODE_INC(KEYCODE_F) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: horizontal */
51675182INPUT_PORTS_END /* Cyber Commando */
51685183
51695184static INPUT_PORTS_START( timecris )
src/mame/drivers/pass.c
r7640r7641
111111static ADDRESS_MAP_START( pass_map, ADDRESS_SPACE_PROGRAM, 16 )
112112   AM_RANGE(0x000000, 0x03ffff) AM_ROM
113113   AM_RANGE(0x080000, 0x083fff) AM_RAM
114   AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(pass_bg_videoram_w) AM_BASE_MEMBER(pass_state,bg_videoram) // Background
115   AM_RANGE(0x210000, 0x213fff) AM_RAM_WRITE(pass_fg_videoram_w) AM_BASE_MEMBER(pass_state,fg_videoram) // Foreground
114   AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(pass_bg_videoram_w) AM_BASE_MEMBER(pass_state, bg_videoram) // Background
115   AM_RANGE(0x210000, 0x213fff) AM_RAM_WRITE(pass_fg_videoram_w) AM_BASE_MEMBER(pass_state, fg_videoram) // Foreground
116116   AM_RANGE(0x220000, 0x2203ff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
117117   AM_RANGE(0x230000, 0x230001) AM_WRITE(soundlatch_word_w)
118118   AM_RANGE(0x230100, 0x230101) AM_READ_PORT("DSW")
r7640r7641
294294ROM_END
295295
296296
297GAME( 1992, pass, 0, pass, pass, 0, ROT0, "Oksan", "Pass", 0)
298
297GAME( 1992, pass, 0, pass, pass, 0, ROT0, "Oksan", "Pass", GAME_SUPPORTS_SAVE )
src/mame/drivers/nss.c
r7640r7641
321321}
322322
323323static ADDRESS_MAP_START( spc_mem, ADDRESS_SPACE_PROGRAM, 8 )
324   AM_RANGE(0x0000, 0x00ef) AM_DEVREADWRITE("spc700", spc_ram_r, spc_ram_w)      /* lower 32k ram */
325   AM_RANGE(0x00f0, 0x00ff) AM_DEVREADWRITE("spc700", spc_io_r, spc_io_w)      /* spc io */
324   AM_RANGE(0x0000, 0x00ef) AM_DEVREADWRITE("spc700", spc_ram_r, spc_ram_w)   /* lower 32k ram */
325   AM_RANGE(0x00f0, 0x00ff) AM_DEVREADWRITE("spc700", spc_io_r, spc_io_w)     /* spc io */
326326   AM_RANGE(0x0100, 0xffff) AM_DEVWRITE("spc700", spc_ram_100_w)
327327   AM_RANGE(0x0100, 0xffbf) AM_DEVREAD("spc700", spc_ram_100_r)
328328   AM_RANGE(0xffc0, 0xffff) AM_DEVREAD("spc700", spc_ipl_r)
r7640r7641
389389   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
390390   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
391391   PORT_DIPSETTING(    0x80, DEF_STR( On ) )
392
393#ifdef SNES_LAYER_DEBUG
394   PORT_START("DEBUG1")
395   PORT_CONFNAME( 0x03, 0x00, "Select BG1 priority" )
396   PORT_CONFSETTING(    0x00, "All" )
397   PORT_CONFSETTING(    0x01, "BG1B (lower) only" )
398   PORT_CONFSETTING(    0x02, "BG1A (higher) only" )
399   PORT_CONFNAME( 0x0c, 0x00, "Select BG2 priority" )
400   PORT_CONFSETTING(    0x00, "All" )
401   PORT_CONFSETTING(    0x04, "BG2B (lower) only" )
402   PORT_CONFSETTING(    0x08, "BG2A (higher) only" )
403   PORT_CONFNAME( 0x30, 0x00, "Select BG3 priority" )
404   PORT_CONFSETTING(    0x00, "All" )
405   PORT_CONFSETTING(    0x10, "BG3B (lower) only" )
406   PORT_CONFSETTING(    0x20, "BG3A (higher) only" )
407   PORT_CONFNAME( 0xc0, 0x00, "Select BG4 priority" )
408   PORT_CONFSETTING(    0x00, "All" )
409   PORT_CONFSETTING(    0x40, "BG4B (lower) only" )
410   PORT_CONFSETTING(    0x80, "BG4A (higher) only" )
411
412   PORT_START("DEBUG2")
413   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle BG 1") PORT_CODE(KEYCODE_1_PAD)
414   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle BG 2") PORT_CODE(KEYCODE_2_PAD)
415   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle BG 3") PORT_CODE(KEYCODE_3_PAD)
416   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle BG 4") PORT_CODE(KEYCODE_4_PAD)
417   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Objects") PORT_CODE(KEYCODE_5_PAD)
418   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Main/Sub") PORT_CODE(KEYCODE_6_PAD)
419   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Color Math") PORT_CODE(KEYCODE_7_PAD)
420   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Windows") PORT_CODE(KEYCODE_8_PAD)
421
422   PORT_START("DEBUG3")
423   PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mosaic") PORT_CODE(KEYCODE_9_PAD)
424   PORT_CONFNAME( 0x70, 0x00, "Select OAM priority" )
425   PORT_CONFSETTING(    0x00, "All" )
426   PORT_CONFSETTING(    0x10, "OAM0 only" )
427   PORT_CONFSETTING(    0x20, "OAM1 only" )
428   PORT_CONFSETTING(    0x30, "OAM2 only" )
429   PORT_CONFSETTING(    0x40, "OAM3 only" )
430   PORT_CONFNAME( 0x80, 0x00, "Draw sprite in reverse order" )
431   PORT_CONFSETTING(    0x00, DEF_STR( Off ) )
432   PORT_CONFSETTING(    0x80, DEF_STR( On ) )
433
434   PORT_START("DEBUG4")
435   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 0 draw")
436   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 1 draw")
437   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 2 draw")
438   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 3 draw")
439   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 4 draw")
440   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 5 draw")
441   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 6 draw")
442   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Toggle Mode 7 draw")
443#endif
392444INPUT_PORTS_END
393445
394446static MACHINE_DRIVER_START( snes )
src/mame/drivers/namcos2.c
r7640r7641
795795   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) \
796796   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) \
797797   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) \
798   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_F1) /* Make it accessible by default*/ \
798   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_0) /* Make it accessible by default*/ \
799799   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
800800
801801#define NAMCOS2_MCU_ANALOG_PORT_DEFAULT \
r7640r7641
10071007   PORT_START("AN4")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 4 */
10081008   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
10091009   PORT_START("AN5")      /* Steering Wheel */      /* sensitivity, delta, min, max */
1010   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(75) PORT_KEYDELTA(100)
1010   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10)
10111011   PORT_START("AN6")      /* Brake Pedal */
10121012   PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30)
10131013   PORT_START("AN7")      /* Accelerator Pedal */
r7640r7641
11431143   PORT_DIPSETTING(   0x00, "L" )
11441144   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
11451145   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
1146   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_F1)
1146   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_0)
11471147   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
11481148
11491149   PORT_START("AN0")      /* 63B05Z0 - 8 CHANNEL ANALOG - CHANNEL 0 2 */
r7640r7641
12851285   NAMCOS2_MCU_DIAL_DEFAULT
12861286INPUT_PORTS_END
12871287
1288/* note, even with perfectly calibrated gun settings the on-screen cursor won't align with the MAME cursor
1289   because the game assumes the screen space isn't a linear mapping to the gun.  This is especially noticeable
1290   with the P2 cursor.  You should turn off the MAME cursor using the 'Crosshair Options' in the MAME internal
1291   TAB menu.
1292
1293   This game has a rather unique control setup, 2 lightguns, plus steering hardware.  Defaults have been set
1294   up to avoid a large number of duplicae buttons.  Using these settings (with -mouse) the following mapping is
1295   given
1296
1297     Z, X - Steer Car
1298     Ctrl - Accelerate
1299     Alt - Brake
1300     Mouse - Aim Gun
1301     Left Shift - Fire Gun
1302 */
1303
12881304static INPUT_PORTS_START( luckywld )
12891305   PORT_START("MCUB")      /* 63B05Z0 - PORT B */
12901306   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED )
r7640r7641
13041320   PORT_START("AN4")
13051321   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(8)
13061322   PORT_START("AN5")      /* Steering Wheel */
1307   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(70)
1323   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_CODE(0) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X)
13081324   PORT_START("AN6")      /* Brake pedal */
13091325   PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_MINMAX(0x00,0x7f) PORT_SENSITIVITY(100) PORT_KEYDELTA(30)
13101326   PORT_START("AN7")      /* Accelerator pedal */
r7640r7641
13121328
13131329   PORT_START("MCUH")      /* 63B05Z0 - PORT H */
13141330   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
1315   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
1316   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
1331   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 Fire") PORT_CODE(KEYCODE_RSHIFT) PORT_PLAYER(2)
1332   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Fire") PORT_CODE(KEYCODE_LSHIFT)
13171333   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
13181334
13191335   NAMCOS2_MCU_DIPSW_DEFAULT
r7640r7641
16411657MACHINE_DRIVER_END
16421658/* end */
16431659
1660static MACHINE_DRIVER_START( assaultp )
1661   MDRV_IMPORT_FROM(default2)
1662
1663   MDRV_QUANTUM_TIME(HZ(12000*8)) /* CPU slices per frame - boosted (along with MCU speed) so that the Mode Select works */
1664MACHINE_DRIVER_END
1665
16441666static MACHINE_DRIVER_START( default3 )
16451667   MDRV_IMPORT_FROM(default)
16461668
r7640r7641
27782800   ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
27792801   ROM_LOAD( "flsvoi1",  0x000000, 0x080000, CRC(590be52f) SHA1(9ef2728dd533979b6019b422fc4961a6085428b4) )
27802802   ROM_LOAD( "flsvoi2",  0x080000, 0x080000, CRC(204b3c27) SHA1(80cd13bfe2a4b3039b4a120b905674e46b8b3b9c) )
2803
2804   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
2805   ROM_LOAD( "finalap2.nv",  0x000000, 0x2000, CRC(c7ae5d0a) SHA1(9527e44accec0ec9d1990138d1b0bfc71957cc8a) )
27812806ROM_END
27822807
27832808/* FINAL LAP 2 (Japan) */
r7640r7641
28322857   ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
28332858   ROM_LOAD( "flsvoi1",  0x000000, 0x080000, CRC(590be52f) SHA1(9ef2728dd533979b6019b422fc4961a6085428b4) )
28342859   ROM_LOAD( "flsvoi2",  0x080000, 0x080000, CRC(204b3c27) SHA1(80cd13bfe2a4b3039b4a120b905674e46b8b3b9c) )
2860
2861   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
2862   ROM_LOAD( "finalap2.nv",  0x000000, 0x2000, CRC(c7ae5d0a) SHA1(9527e44accec0ec9d1990138d1b0bfc71957cc8a) )
28352863ROM_END
28362864
28372865/* FINAL LAP 3 (WORLD) */
2838ROM_START( finalap3 )
2866ROM_START( finalap3 ) // this set displays MOTION (Ver. 3) in the test mode menu
28392867   ROM_REGION( 0x040000, "maincpu", 0 ) /* Master CPU */
28402868   ROM_LOAD16_BYTE( "fl3mpr0.bin",  0x000000, 0x020000, CRC(9ff361ff) SHA1(0a197f5a3e9a03455cd5afe6979587baf757973f) )
28412869   ROM_LOAD16_BYTE( "fl3mpr1.bin",  0x000001, 0x020000, CRC(17efb7f2) SHA1(74940950b8b1a3353a130846937c9f651be3f335) )
r7640r7641
28642892   ROM_LOAD( "fltobj7",  0x380000, 0x80000, CRC(b52a85e2) SHA1(1eea10eb20ae56309397238a52e9ea0756912412) )
28652893
28662894   ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles */
2867   ROM_LOAD( "fltchr-0.11n", 0x000000, 0x40000, CRC(97ed5b62) SHA1(ce076ae71c6b2950be2a303829072d59732315df) )
2868   ROM_LOAD( "fltchr-1.11p", 0x040000, 0x40000, CRC(2e68d13c) SHA1(46bb0628da1f97e0f6865f37e53a01d2e8391255) )
2869   ROM_LOAD( "fltchr-2.11r", 0x080000, 0x40000, CRC(43c3abf8) SHA1(de66bcdb3e419725b7e7d9ae0c95e13ee99ec5c9) )
2870   ROM_LOAD( "fltchr-3.11s", 0x0c0000, 0x40000, CRC(e9b05a1f) SHA1(6b7e08f4f535fb99692920612f751a49c3cd529e) )
2871   ROM_LOAD( "fltchr-4.9n",  0x100000, 0x40000, CRC(5ae43767) SHA1(f3e24dd5ba2cffffd616ddee628e423aa0aec1d2) )
2872   ROM_LOAD( "fltchr-5.9p",  0x140000, 0x40000, CRC(b5f4e780) SHA1(a7d64d150121eda5d82f5651a06a11683220577a) )
2873   ROM_LOAD( "fltchr-6.9r",  0x180000, 0x40000, CRC(4b0baea2) SHA1(a75ba5294f06ddbe170988073b8f4a74a7cbcee1) )
2874   ROM_LOAD( "fltchr-7.9s",  0x1c0000, 0x40000, CRC(85db9e94) SHA1(918f414c1dd51f7451a9a491ba1d60f5f9a38c3e) )
2895   ROM_LOAD( "flt2 chr-0.bin", 0x000000, 0x40000, CRC(5954f270) SHA1(6f26365d89f38d4ab477908f32823e06f1a84e09) )
2896   ROM_LOAD( "fltchr-1.11p",   0x040000, 0x40000, CRC(2e68d13c) SHA1(46bb0628da1f97e0f6865f37e53a01d2e8391255) )
2897   ROM_LOAD( "flt2 chr-2.bin", 0x080000, 0x40000, CRC(98f3b190) SHA1(4858dab070c0c46d37148312664c6a616765c240) )
2898   ROM_LOAD( "fltchr-3.11s",   0x0c0000, 0x40000, CRC(e9b05a1f) SHA1(6b7e08f4f535fb99692920612f751a49c3cd529e) )
2899   ROM_LOAD( "fltchr-4.9n",    0x100000, 0x40000, CRC(5ae43767) SHA1(f3e24dd5ba2cffffd616ddee628e423aa0aec1d2) )
2900   ROM_LOAD( "fltchr-5.9p",    0x140000, 0x40000, CRC(b5f4e780) SHA1(a7d64d150121eda5d82f5651a06a11683220577a) )
2901   ROM_LOAD( "fltchr-6.9r",    0x180000, 0x40000, CRC(4b0baea2) SHA1(a75ba5294f06ddbe170988073b8f4a74a7cbcee1) )
2902   ROM_LOAD( "fltchr-7.9s",    0x1c0000, 0x40000, CRC(85db9e94) SHA1(918f414c1dd51f7451a9a491ba1d60f5f9a38c3e) )
28752903
28762904   ROM_REGION( 0x080000, "gfx4", 0 ) /* Mask shape */
2877   NAMCOS2_GFXROM_LOAD_256K( "fltsha",  0x000000, CRC(211bbd83) SHA1(17502830d1af1e2cfbc17e2f3bb303f2a0c27e68) )
2905   NAMCOS2_GFXROM_LOAD_256K( "flt2 sha.bin",  0x000000, CRC(6986565b) SHA1(df95f2ad5d1e938551d33153f2dcc4711ffd0eba) )
28782906
28792907   ROM_REGION16_BE( 0x200000, "user1", 0 ) /* Shared data roms */
28802908   NAMCOS2_DATA_LOAD_E_128K( "flt1d0",  0x000000, CRC(80004966) SHA1(112b2a9b0ea792d5dbff1b9cf904da788aeede29) )
r7640r7641
28892917
28902918   ROM_REGION( 8*1024, "user2", 0 ) /* zoom */
28912919   ROM_LOAD( "04544191.6r", 0, 8*1024, CRC(90db1bf6) SHA1(dbb9e50a8efc3b4012fcf587cc87da9ef42a1b80) )
2920
2921   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
2922   ROM_LOAD( "finalap3.nv",  0x000000, 0x2000, CRC(efbc6274) SHA1(f542012e467027b7bd5d7102096ff91d8c9adee3) )
28922923ROM_END
28932924
2925
2926/* FINAL LAP 3 (WORLD) */
2927ROM_START( finalap3a )
2928   ROM_REGION( 0x040000, "maincpu", 0 ) /* Master CPU */
2929   ROM_LOAD16_BYTE( "flt2-mp0",  0x000000, 0x020000, CRC(22082168) SHA1(d3090a91bda70fb46d3b7846d32db36c1f42d5cc) )
2930   ROM_LOAD16_BYTE( "flt2-mp1",  0x000001, 0x020000, CRC(2ec21977) SHA1(fe8ded6402da710255e09cdb22ba1ef5acd78518) )
2931
2932   ROM_REGION( 0x040000, "slave", 0 ) /* Slave CPU */
2933   ROM_LOAD16_BYTE( "flt1sp0",  0x000000, 0x020000, CRC(e804ced1) SHA1(b31e1fddd202ba503b28455a270e8d45a348dc2e) )
2934   ROM_LOAD16_BYTE( "flt1sp1",  0x000001, 0x020000, CRC(3a2b24ee) SHA1(e4f16f30516dab13cc8b1cb6c80ec1df129f8851) )
2935
2936   ROM_REGION( 0x030000, "audiocpu", 0 ) /* Sound CPU (Banked) */
2937   ROM_LOAD( "flt1snd0",  0x00c000, 0x004000, CRC(60b72aed) SHA1(f12e157ae5e9f373ba1d75012b869b1c4ad9fb00) )
2938   ROM_CONTINUE( 0x010000, 0x01c000 )
2939   ROM_RELOAD(  0x010000, 0x020000 )
2940
2941   ROM_REGION( 0x010000, "mcu", 0 ) /* I/O MCU */
2942   ROM_LOAD( "sys2mcpu.bin",  0x000000, 0x002000, CRC(a342a97e) SHA1(2c420d34dba21e409bf78ddca710fc7de65a6642) )
2943   ROM_LOAD( "sys2c65c.bin",  0x008000, 0x008000, BAD_DUMP CRC(a5b2a4ff) SHA1(068bdfcc71a5e83706e8b23330691973c1c214dc) )
2944
2945   ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprites */
2946   ROM_LOAD( "fltobj0",  0x000000, 0x80000, CRC(eab19ec6) SHA1(2859e88b94aa873f3b6ba22790f2211f3e172dd1) )
2947   ROM_LOAD( "fltobj2",  0x080000, 0x80000, CRC(2a3b7ded) SHA1(455d9d6cf7d497687f93af899fc20bbff6129391) )
2948   ROM_LOAD( "fltobj4",  0x100000, 0x80000, CRC(84aa500c) SHA1(087c0089478a270154f50f3b0f001428e80d74c7) )
2949   ROM_LOAD( "fltobj6",  0x180000, 0x80000, CRC(33118e63) SHA1(126cc034909e05da953a1a67d6c0f18f5304b407) )
2950   ROM_LOAD( "fltobj1",  0x200000, 0x80000, CRC(4ef37a51) SHA1(2f43691cfcd852773ae5e1d879f556f232bae877) )
2951   ROM_LOAD( "fltobj3",  0x280000, 0x80000, CRC(b86dc7cd) SHA1(25402d7111c1277a618b313d1244c1a567ce458a) )
2952   ROM_LOAD( "fltobj5",  0x300000, 0x80000, CRC(6a53e603) SHA1(6087c694e0e30a98c84227991d9c2e9c39c3e9ca) )
2953   ROM_LOAD( "fltobj7",  0x380000, 0x80000, CRC(b52a85e2) SHA1(1eea10eb20ae56309397238a52e9ea0756912412) )
2954
2955   ROM_REGION( 0x200000, "gfx2", 0 ) /* Tiles */
2956   ROM_LOAD( "flt2 chr-0.bin", 0x000000, 0x40000, CRC(5954f270) SHA1(6f26365d89f38d4ab477908f32823e06f1a84e09) )
2957   ROM_LOAD( "fltchr-1.11p",   0x040000, 0x40000, CRC(2e68d13c) SHA1(46bb0628da1f97e0f6865f37e53a01d2e8391255) )
2958   ROM_LOAD( "flt2 chr-2.bin", 0x080000, 0x40000, CRC(98f3b190) SHA1(4858dab070c0c46d37148312664c6a616765c240) )
2959   ROM_LOAD( "fltchr-3.11s",   0x0c0000, 0x40000, CRC(e9b05a1f) SHA1(6b7e08f4f535fb99692920612f751a49c3cd529e) )
2960   ROM_LOAD( "fltchr-4.9n",    0x100000, 0x40000, CRC(5ae43767) SHA1(f3e24dd5ba2cffffd616ddee628e423aa0aec1d2) )
2961   ROM_LOAD( "fltchr-5.9p",    0x140000, 0x40000, CRC(b5f4e780) SHA1(a7d64d150121eda5d82f5651a06a11683220577a) )
2962   ROM_LOAD( "fltchr-6.9r",    0x180000, 0x40000, CRC(4b0baea2) SHA1(a75ba5294f06ddbe170988073b8f4a74a7cbcee1) )
2963   ROM_LOAD( "fltchr-7.9s",    0x1c0000, 0x40000, CRC(85db9e94) SHA1(918f414c1dd51f7451a9a491ba1d60f5f9a38c3e) )
2964
2965   ROM_REGION( 0x080000, "gfx4", 0 ) /* Mask shape */
2966   NAMCOS2_GFXROM_LOAD_256K( "flt2 sha.bin",  0x000000, CRC(6986565b) SHA1(df95f2ad5d1e938551d33153f2dcc4711ffd0eba) )
2967
2968   ROM_REGION16_BE( 0x200000, "user1", 0 ) /* Shared data roms */
2969   NAMCOS2_DATA_LOAD_E_128K( "flt1d0",  0x000000, CRC(80004966) SHA1(112b2a9b0ea792d5dbff1b9cf904da788aeede29) )
2970   NAMCOS2_DATA_LOAD_O_128K( "flt1d1",  0x000000, CRC(a2e93e8c) SHA1(9c8a5431a79153a70eb6939d16e0a5a6be235e75) )
2971
2972   ROM_REGION( 0x100, "user3", 0 ) /* prom for road colors */
2973   ROM_LOAD( "fl1-3.5b", 0, 0x100, CRC(d179d99a) SHA1(4e64f284c74d2b77f893bd28aaa6489084056aa2) )
2974
2975   ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
2976   ROM_LOAD( "fltvoi1",  0x000000, 0x080000, CRC(4fc7c0ba) SHA1(bbfd1764fd79087bba5e6199e8916c28bed4d3f4) )
2977   ROM_LOAD( "fltvoi2",  0x080000, 0x080000, CRC(409c62df) SHA1(0c2f088168f1f92f2f767ea47522c0e8f4a10265) )
2978
2979   ROM_REGION( 8*1024, "user2", 0 ) /* zoom */
2980   ROM_LOAD( "04544191.6r", 0, 8*1024, CRC(90db1bf6) SHA1(dbb9e50a8efc3b4012fcf587cc87da9ef42a1b80) )
2981
2982   ROM_REGION( 0x20000, "unknown", 0 ) /* unknown rom */
2983   ROM_LOAD( "341.bin", 0x00000, 0x20000, CRC(8c90ca97) SHA1(dce2a680a5bc213f2f48d4baffc86ea27fe90209) ) // was read as 27c010
2984
2985   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
2986   ROM_LOAD( "finalap3.nv",  0x000000, 0x2000, CRC(efbc6274) SHA1(f542012e467027b7bd5d7102096ff91d8c9adee3) )
2987ROM_END
2988
2989
28942990/* FINAL LAP 3 JAPAN */
28952991ROM_START( finalap3j )
28962992   ROM_REGION( 0x040000, "maincpu", 0 ) /* Master CPU */
r7640r7641
29463042
29473043   ROM_REGION( 8*1024, "user2", 0 ) /* zoom */
29483044   ROM_LOAD( "04544191.6r", 0, 8*1024, CRC(90db1bf6) SHA1(dbb9e50a8efc3b4012fcf587cc87da9ef42a1b80) )
3045
3046   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
3047   ROM_LOAD( "finalap3.nv",  0x000000, 0x2000, CRC(efbc6274) SHA1(f542012e467027b7bd5d7102096ff91d8c9adee3) )
29493048ROM_END
29503049
29513050/* FINEST HOUR */
r7640r7641
33943493   ROM_LOAD( "ampal16l8a-sys87b-1.4g", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */
33953494   ROM_LOAD( "ampal16l8a-sys87b-2.5e", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */
33963495   ROM_LOAD( "pal12l10-sys87b-3.8d",   0x0400, 0x0040, CRC(d3ae64a6) SHA1(8e56f447908246e84d5a79df1a1cd3d5c8a040fb) )
3496
3497   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
3498   ROM_LOAD( "metlhawk.nv",  0x000000, 0x2000, CRC(547cb0dc) SHA1(965ce5f8a42f5268cda2e77e4be115ccf57f1952) )
33973499ROM_END
33983500
33993501/* METAL HAWK (Japan) */
r7640r7641
34623564   ROM_LOAD( "ampal16l8a-sys87b-1.4g", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */
34633565   ROM_LOAD( "ampal16l8a-sys87b-2.5e", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */
34643566   ROM_LOAD( "pal12l10-sys87b-3.8d",   0x0400, 0x0040, CRC(d3ae64a6) SHA1(8e56f447908246e84d5a79df1a1cd3d5c8a040fb) )
3567
3568   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
3569   ROM_LOAD( "metlhawk.nv",  0x000000, 0x2000, CRC(547cb0dc) SHA1(965ce5f8a42f5268cda2e77e4be115ccf57f1952) )
34653570ROM_END
34663571
34673572/* MIRAI NINJA */
r7640r7641
38283933   ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
38293934   ROM_LOAD( "sn_voi1.3m",  0x000000, 0x080000, CRC(464e616d) SHA1(7279a2af64bdf76972bcf326611e6bff57a9cd39) )
38303935   ROM_LOAD( "sn_voi2.3l",  0x080000, 0x080000, CRC(8c3251b5) SHA1(fa364c8462f490c636605262c5492a6a9b00e5b1) )
3936
3937   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
3938   ROM_LOAD( "sgunner.nv",  0x000000, 0x2000, CRC(106026f8) SHA1(e4be6701d4eef6c18406593c6dee10644f29a15b) )
38313939ROM_END
38323940
38333941/* STEEL GUNNER (Japan) */
r7640r7641
38763984   ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
38773985   ROM_LOAD( "sn_voi1.3m",  0x000000, 0x080000, CRC(464e616d) SHA1(7279a2af64bdf76972bcf326611e6bff57a9cd39) )
38783986   ROM_LOAD( "sn_voi2.3l",  0x080000, 0x080000, CRC(8c3251b5) SHA1(fa364c8462f490c636605262c5492a6a9b00e5b1) )
3987
3988   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
3989   ROM_LOAD( "sgunner.nv",  0x000000, 0x2000, CRC(106026f8) SHA1(e4be6701d4eef6c18406593c6dee10644f29a15b) )
38793990ROM_END
38803991
38813992/* STEEL GUNNER 2 */
r7640r7641
39284039   ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
39294040   ROM_LOAD( "sns_voi1.bin",  0x000000, 0x080000, CRC(219c97f7) SHA1(d4b1d81e3d0e2585bc2fa305c0d80beef15b2a9f) )
39304041   ROM_LOAD( "sns_voi2.bin",  0x080000, 0x080000, CRC(562ec86b) SHA1(c9874c7e1f38c5b38d21f45a82028651cf9089a5) )
4042
4043   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
4044   ROM_LOAD( "sgunner2.nv",  0x000000, 0x2000, CRC(57a521c6) SHA1(d60b4f6f099b7f9fb1e575c5f9a74397986c6dac) )
39314045ROM_END
39324046
39334047/* STEEL GUNNER 2 (Japan) */
r7640r7641
39804094   ROM_REGION( 0x100000, "c140", 0 ) /* Sound voices */
39814095   ROM_LOAD( "sns_voi1.bin",  0x000000, 0x080000, CRC(219c97f7) SHA1(d4b1d81e3d0e2585bc2fa305c0d80beef15b2a9f) )
39824096   ROM_LOAD( "sns_voi2.bin",  0x080000, 0x080000, CRC(562ec86b) SHA1(c9874c7e1f38c5b38d21f45a82028651cf9089a5) )
4097
4098   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
4099   ROM_LOAD( "sgunner2j.nv",  0x000000, 0x2000, CRC(014bccf9) SHA1(b6437fadf3e71df7a71fde9ec7ffc95fe6c057b3) )
39834100ROM_END
39844101
39854102/* SUPER WORLD STADIUM */
r7640r7641
47514868
47524869   ROM_REGION( 0x100, "user3", 0 ) /* prom for road colors */
47534870   ROM_LOAD( "lw1ld8.10w", 0, 0x100, CRC(29058c73) SHA1(4916d6bdb7f78e6803698cab32d1586ea457dfc8) )
4871
4872   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration - see notes with inputs */
4873   ROM_LOAD( "luckywld.nv",  0x000000, 0x2000, CRC(0c185d2a) SHA1(6a4876361731df423515a0f3b37ba1496d6b1964) )
47544874ROM_END
47554875
47564876/* LUCKY & WILD (Japan) */
r7640r7641
48144934
48154935   ROM_REGION( 0x100, "user3", 0 ) /* prom for road colors */
48164936   ROM_LOAD( "lw1ld8.10w", 0, 0x100, CRC(29058c73) SHA1(4916d6bdb7f78e6803698cab32d1586ea457dfc8) )
4937
4938   ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration - see notes with inputs */
4939   ROM_LOAD( "luckywld.nv",  0x000000, 0x2000, CRC(0c185d2a) SHA1(6a4876361731df423515a0f3b37ba1496d6b1964) )
48174940ROM_END
48184941
48194942
r7640r7641
48294952   namcos2_gametype=NAMCOS2_ASSAULT_PLUS;
48304953}
48314954
4955static DRIVER_INIT( assaultp_hack ){
4956   // HACK!
4957   // boost the MCU speed to avoid a race condition which causes
4958   // the mode select menu to vanish before you have a chance to use
4959   // it.  It probably needs better RAM access timing etc.
4960   //
4961   // This is used in conjunction with the interleave increase in the
4962   // MACHINE_DRIVER
4963   cpu_set_clockscale(devtag_get_device(machine, "mcu"), 4.0f);
4964
4965   DRIVER_INIT_CALL( assaultp );
4966}
4967
48324968static DRIVER_INIT( burnforc ){
48334969    namcos2_gametype=NAMCOS2_BURNING_FORCE;
48344970}
r7640r7641
50265162/* and metal hawk have the B version and dragon saber has the C version       */
50275163
50285164/*    YEAR, NAME,     PARENT,   MACHINE,  INPUT,    INIT,     MONITOR, COMPANY, FULLNAME */
5029GAMEL(1987, finallap,  0,        finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Rev E)", GAME_IMPERFECT_GRAPHICS, layout_finallap )
5030GAMEL(1987, finallapd, finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Rev D)", GAME_IMPERFECT_GRAPHICS, layout_finallap )
5031GAMEL(1987, finallapc, finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Rev C)", GAME_IMPERFECT_GRAPHICS, layout_finallap )
5032GAMEL(1987, finallapjc,finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Japan - Rev C)", GAME_IMPERFECT_GRAPHICS, layout_finallap )
5033GAMEL(1987, finallapjb,finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Japan - Rev B)", GAME_IMPERFECT_GRAPHICS, layout_finallap )
5034GAME( 1988, assault,   0,        default2, assault,  assault , ROT90,  "Namco", "Assault" , 0)
5035GAME( 1988, assaultj,  assault,  default2, assault,  assaultj, ROT90,  "Namco", "Assault (Japan)" , 0)
5036GAME( 1988, assaultp,  assault,  default2, assault,  assaultp, ROT90,  "Namco", "Assault Plus (Japan)" , 0)
5165GAMEL(1987, finallap,  0,        finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Rev E)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
5166GAMEL(1987, finallapd, finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Rev D)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
5167GAMEL(1987, finallapc, finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Rev C)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
5168GAMEL(1987, finallapjc,finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Japan - Rev C)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
5169GAMEL(1987, finallapjb,finallap, finallap, finallap, finallap, ROT0,   "Namco", "Final Lap (Japan - Rev B)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
5170
5171GAME( 1988, assault,   0,        default2, assault,  assault ,      ROT90, "Namco", "Assault" , 0)
5172GAME( 1988, assaultj,  assault,  default2, assault,  assaultj,      ROT90, "Namco", "Assault (Japan)" , 0)
5173GAME( 1988, assaultp,  assault,  assaultp, assault,  assaultp_hack, ROT90, "Namco", "Assault Plus (Japan)" , 0)
5174
50375175GAME( 1988, metlhawk,  0,        metlhawk, metlhawk, metlhawk, ROT90,  "Namco", "Metal Hawk", 0)
50385176GAME( 1988, metlhawkj, metlhawk, metlhawk, metlhawk, metlhawk, ROT90,  "Namco", "Metal Hawk (Japan)", 0)
5177
50395178GAME( 1988, ordyne,    0,        default,  default,  ordyne,   ROT180, "Namco", "Ordyne (Japan, English Version)", 0 )
50405179GAME( 1988, ordynej,   ordyne,   default,  default,  ordyne,   ROT180, "Namco", "Ordyne (Japan)", 0 )
5180
50415181GAME( 1988, mirninja,  0,        default,  default,  mirninja, ROT0,   "Namco", "Mirai Ninja (Japan)", 0 )
5182
50425183GAME( 1988, phelios,   0,        default2, default,  phelios , ROT90,  "Namco", "Phelios (Japan)" , 0)
5184
50435185GAME( 1989, dirtfoxj,  0,        default2, dirtfox,  dirtfoxj, ROT90,  "Namco", "Dirt Fox (Japan)" , 0 )
5044GAME( 1989, fourtrax,  0,        finallap, fourtrax, fourtrax, ROT0,   "Namco", "Four Trax", GAME_IMPERFECT_GRAPHICS )
5186
5187GAMEL(1989, fourtrax,  0,        finallap, fourtrax, fourtrax, ROT0,   "Namco", "Four Trax", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap )
5188
50455189GAME( 1989, valkyrie,  0,        default3, default,  valkyrie, ROT90,  "Namco", "Valkyrie No Densetsu (Japan)", 0 )
5190
50465191GAME( 1989, finehour,  0,        default2, default,  finehour, ROT0,   "Namco", "Finest Hour (Japan)" , 0)
5192
50475193GAME( 1989, burnforc,  0,        default3, default,  burnforc, ROT0,   "Namco", "Burning Force (Japan new version)", 0 )
50485194GAME( 1989, burnforco, burnforc, default3, default,  burnforc, ROT0,   "Namco", "Burning Force (Japan old version)", 0 )
5195
50495196GAME( 1989, marvland,  0,        default,  default,  marvland, ROT0,   "Namco", "Marvel Land (US)", 0 )
50505197GAME( 1989, marvlandj, marvland, default,  default,  marvlanj, ROT0,   "Namco", "Marvel Land (Japan)", 0 )
5198
50515199GAME( 1990, kyukaidk,  0,        default,  kyukaidk, kyukaidk, ROT0,   "Namco", "Kyuukai Douchuuki (Japan new version)", 0 )
50525200GAME( 1990, kyukaidko, kyukaidk, default,  kyukaidk, kyukaidk, ROT0,   "Namco", "Kyuukai Douchuuki (Japan old version)", 0 )
5201
50535202GAME( 1990, dsaber,    0,        default3, default,  dsaber,   ROT90,  "Namco", "Dragon Saber", 0 )
50545203GAME( 1990, dsaberj,   dsaber,   default3, default,  dsaberj,  ROT90,  "Namco", "Dragon Saber (Japan)", 0 )
5055GAMEL(1990, finalap2,  0,        finallap, finallap, finalap2, ROT0,   "Namco", "Final Lap 2", GAME_IMPERFECT_GRAPHICS, layout_finallap  )
5056GAMEL(1990, finalap2j, finalap2, finallap, finallap, finalap2, ROT0,   "Namco", "Final Lap 2 (Japan)", GAME_IMPERFECT_GRAPHICS, layout_finallap  )
5204
5205GAMEL(1990, finalap2,  0,        finallap, finallap, finalap2, ROT0,   "Namco", "Final Lap 2", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap  )
5206GAMEL(1990, finalap2j, finalap2, finallap, finallap, finalap2, ROT0,   "Namco", "Final Lap 2 (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap  )
5207
50575208GAME( 1990, gollygho,  0,        gollygho, gollygho, gollygho, ROT180, "Namco", "Golly! Ghost!", 0 )
5209
50585210GAME( 1990, rthun2,    0,        default3, default,  rthun2,   ROT0,   "Namco", "Rolling Thunder 2", 0 )
50595211GAME( 1990, rthun2j,   rthun2,   default3, default,  rthun2j,  ROT0,   "Namco", "Rolling Thunder 2 (Japan)", 0 )
5212
50605213GAME( 1990, sgunner,   0,        sgunner,  sgunner,  sgunner2, ROT0,   "Namco", "Steel Gunner", 0 )
50615214GAME( 1990, sgunnerj,  sgunner,  sgunner,  sgunner,  sgunner2, ROT0,   "Namco", "Steel Gunner (Japan)", 0 )
5215
50625216GAME( 1991, sgunner2,  0,        sgunner,  sgunner,  sgunner2, ROT0,   "Namco", "Steel Gunner 2 (US)", 0 )
50635217GAME( 1991, sgunner2j, sgunner2, sgunner,  sgunner,  sgunner2, ROT0,   "Namco", "Steel Gunner 2 (Japan)", 0 )
5218
50645219GAME( 1991, cosmogng,  0,        default,  default,  cosmogng, ROT90,  "Namco", "Cosmo Gang the Video (US)", 0 )
50655220GAME( 1991, cosmogngj, cosmogng, default,  default,  cosmogng, ROT90,  "Namco", "Cosmo Gang the Video (Japan)", 0 )
5221
50665222GAME( 1992, bubbletr,  0,        gollygho, bubbletr, bubbletr, ROT180, "Namco", "Bubble Trouble (Japan)", GAME_IMPERFECT_GRAPHICS )   /* missing external artwork */
5067GAMEL(1992, finalap3,  0,        finallap, finalap3, finalap3, ROT0,   "Namco", "Final Lap 3 (World)", GAME_IMPERFECT_GRAPHICS, layout_finallap  )
5068GAMEL(1992, finalap3j, finalap3, finallap, finalap3, finalap3, ROT0,   "Namco", "Final Lap 3 (Japan)", GAME_IMPERFECT_GRAPHICS, layout_finallap  )
5223
5224GAMEL(1992, finalap3,  0,        finallap, finalap3, finalap3, ROT0,   "Namco", "Final Lap 3 (World, set 1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap  )
5225GAMEL(1992, finalap3a,    finalap3, finallap, finalap3, finalap3, ROT0,   "Namco", "Final Lap 3 (World, set 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap  )
5226GAMEL(1992, finalap3j, finalap3, finallap, finalap3, finalap3, ROT0,   "Namco", "Final Lap 3 (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND, layout_finallap  )
5227
50695228GAME( 1992, luckywld,  0,        luckywld, luckywld, luckywld, ROT0,   "Namco", "Lucky & Wild", 0 )
50705229GAME( 1992, luckywldj, luckywld, luckywld, luckywld, luckywld, ROT0,   "Namco", "Lucky & Wild (Japan)", 0 )
5071GAME( 1992, suzuka8h,  0,        luckywld, suzuka,   suzuka8h, ROT0,   "Namco", "Suzuka 8 Hours (World)", GAME_IMPERFECT_GRAPHICS )
5072GAME( 1992, suzuka8hj, suzuka8h, luckywld, suzuka,   suzuka8h, ROT0,   "Namco", "Suzuka 8 Hours (Japan)", GAME_IMPERFECT_GRAPHICS  )
5230
5231GAME( 1992, suzuka8h,  0,        luckywld, suzuka,   suzuka8h, ROT0,   "Namco", "Suzuka 8 Hours (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND)
5232GAME( 1992, suzuka8hj, suzuka8h, luckywld, suzuka,   suzuka8h, ROT0,   "Namco", "Suzuka 8 Hours (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
5233
50735234GAME( 1992, sws,       0,        default,  default,  sws,      ROT0,   "Namco", "Super World Stadium (Japan)", 0 )
5235
50745236GAME( 1992, sws92,     0,        default,  default,  sws92,    ROT0,   "Namco", "Super World Stadium '92 (Japan)", 0 )
50755237GAME( 1992, sws92g,    sws92,    default,  default,  sws92g,   ROT0,   "Namco", "Super World Stadium '92 Gekitouban (Japan)", 0 )
5076GAME( 1993, suzuk8h2,  0,        luckywld, suzuka,   suzuk8h2, ROT0,   "Namco", "Suzuka 8 Hours 2 (World)", GAME_IMPERFECT_GRAPHICS )
5238
5239GAME( 1993, suzuk8h2,  0,        luckywld, suzuka,   suzuk8h2, ROT0,   "Namco", "Suzuka 8 Hours 2 (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
5240
50775241GAME( 1993, sws93,     0,        default,  default,  sws93,    ROT0,   "Namco", "Super World Stadium '93 (Japan)", 0 )
src/mame/drivers/pbaction.c
r7640r7641
6868#include "deprecat.h"
6969#include "sound/ay8910.h"
7070#include "machine/segacrpt.h"
71#include "includes/pbaction.h"
7172
7273
73extern UINT8 *pbaction_videoram,*pbaction_colorram;
74extern UINT8 *pbaction_videoram2,*pbaction_colorram2;
75
76extern WRITE8_HANDLER( pbaction_videoram_w );
77extern WRITE8_HANDLER( pbaction_colorram_w );
78extern WRITE8_HANDLER( pbaction_videoram2_w );
79extern WRITE8_HANDLER( pbaction_colorram2_w );
80extern WRITE8_HANDLER( pbaction_flipscreen_w );
81extern WRITE8_HANDLER( pbaction_scroll_w );
82
83extern VIDEO_START( pbaction );
84extern VIDEO_UPDATE( pbaction );
85
86
8774static WRITE8_HANDLER( pbaction_sh_command_w )
8875{
89   soundlatch_w(space,offset,data);
90   cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0x00);
76   pbaction_state *state = (pbaction_state *)space->machine->driver_data;
77   soundlatch_w(space, offset, data);
78   cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0x00);
9179}
9280
9381
94static UINT8 *work_ram;
95
96
9782static ADDRESS_MAP_START( pbaction_map, ADDRESS_SPACE_PROGRAM, 8 )
9883   AM_RANGE(0x0000, 0x7fff) AM_ROM
9984   AM_RANGE(0x8000, 0xbfff) AM_ROM
100   AM_RANGE(0xc000, 0xcfff) AM_RAM AM_BASE(&work_ram)
101   AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(pbaction_videoram2_w) AM_BASE(&pbaction_videoram2)
102   AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(pbaction_colorram2_w) AM_BASE(&pbaction_colorram2)
103   AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(pbaction_videoram_w) AM_BASE(&pbaction_videoram)
104   AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(pbaction_colorram_w) AM_BASE(&pbaction_colorram)
105   AM_RANGE(0xe000, 0xe07f) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
85   AM_RANGE(0xc000, 0xcfff) AM_RAM AM_BASE_MEMBER(pbaction_state, work_ram)
86   AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(pbaction_videoram2_w) AM_BASE_MEMBER(pbaction_state, videoram2)
87   AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(pbaction_colorram2_w) AM_BASE_MEMBER(pbaction_state, colorram2)
88   AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(pbaction_videoram_w) AM_BASE_MEMBER(pbaction_state, videoram)
89   AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(pbaction_colorram_w) AM_BASE_MEMBER(pbaction_state, colorram)
90   AM_RANGE(0xe000, 0xe07f) AM_RAM AM_BASE_SIZE_MEMBER(pbaction_state, spriteram, spriteram_size)
10691   AM_RANGE(0xe400, 0xe5ff) AM_RAM_WRITE(paletteram_xxxxBBBBGGGGRRRR_le_w) AM_BASE_GENERIC(paletteram)
10792   AM_RANGE(0xe600, 0xe600) AM_READ_PORT("P1") AM_WRITE(interrupt_enable_w)
10893   AM_RANGE(0xe601, 0xe601) AM_READ_PORT("P2")
r7640r7641
267252}
268253
269254
255static MACHINE_START( pbaction )
256{
257   pbaction_state *state = (pbaction_state *)machine->driver_data;
258
259   state->maincpu = devtag_get_device(machine, "maincpu");
260   state->audiocpu = devtag_get_device(machine, "audiocpu");
261
262   state_save_register_global(machine, state->scroll);
263}
264
265static MACHINE_RESET( pbaction )
266{
267   pbaction_state *state = (pbaction_state *)machine->driver_data;
268
269   state->scroll = 0;
270}
271
270272static MACHINE_DRIVER_START( pbaction )
271273
274   /* driver data */
275   MDRV_DRIVER_DATA(pbaction_state)
276
272277   /* basic machine hardware */
273278   MDRV_CPU_ADD("maincpu", Z80, 4000000)   /* 4 MHz? */
274279   MDRV_CPU_PROGRAM_MAP(pbaction_map)
r7640r7641
280285   MDRV_CPU_VBLANK_INT_HACK(pbaction_interrupt,2)   /* ??? */
281286                           /* IRQs are caused by the main CPU */
282287
288   MDRV_MACHINE_START(pbaction)
289   MDRV_MACHINE_RESET(pbaction)
290
283291   /* video hardware */
284292   MDRV_SCREEN_ADD("screen", RASTER)
285293   MDRV_SCREEN_REFRESH_RATE(60)
r7640r7641
455463
456464static READ8_HANDLER( pbactio3_prot_kludge_r )
457465{
466   pbaction_state *state = (pbaction_state *)space->machine->driver_data;
467
458468   /* on startup, the game expect this location to NOT act as RAM */
459469   if (cpu_get_pc(space->cpu) == 0xab80)
460470      return 0;
461471
462   return work_ram[0];
472   return state->work_ram[0];
463473}
464474
465475static DRIVER_INIT( pbactio3 )
r7640r7641
468478   UINT8 *rom = memory_region(machine, "maincpu");
469479
470480   /* first of all, do a simple bitswap */
471   for (i = 0;i < 0xc000;i++)
481   for (i = 0; i < 0xc000; i++)
472482   {
473483      rom[i] = BITSWAP8(rom[i], 7,6,5,4,1,2,3,0);
474484   }
r7640r7641
488498
489499
490500
491GAME( 1985, pbaction, 0,        pbaction, pbaction, 0,        ROT90, "Tehkan", "Pinball Action (set 1)", 0 )
492GAME( 1985, pbaction2,pbaction, pbaction, pbaction, 0,        ROT90, "Tehkan", "Pinball Action (set 2)", 0 )
493GAME( 1985, pbaction3,pbaction, pbaction, pbaction, pbactio3, ROT90, "Tehkan", "Pinball Action (set 3, encrypted)", 0 )
494GAME( 1985, pbaction4,pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 4, encrypted)", 0 )
495GAME( 1985, pbaction5,pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 5, encrypted)", 0 )
501GAME( 1985, pbaction,  0,        pbaction, pbaction, 0,        ROT90, "Tehkan", "Pinball Action (set 1)", GAME_SUPPORTS_SAVE )
502GAME( 1985, pbaction2, pbaction, pbaction, pbaction, 0,        ROT90, "Tehkan", "Pinball Action (set 2)", GAME_SUPPORTS_SAVE )
503GAME( 1985, pbaction3, pbaction, pbaction, pbaction, pbactio3, ROT90, "Tehkan", "Pinball Action (set 3, encrypted)", GAME_SUPPORTS_SAVE )
504GAME( 1985, pbaction4, pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 4, encrypted)", GAME_SUPPORTS_SAVE )
505GAME( 1985, pbaction5, pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 5, encrypted)", GAME_SUPPORTS_SAVE )
src/mame/drivers/funworld.c
r7640r7641
1111
1212  * Jolly Card (austrian),                            TAB-Austria,        1985.
1313  * Jolly Card (3x3 deal),                            TAB-Austria,        1985.
14  * Jolly Card Professional 2.0,                      Spale-Soft,         2000.
14  * Jolly Card Professional 2.0 (MZS Tech),           MZS Tech,           1993.
15  * Jolly Card Professional 2.0 (Spale Soft),         Spale Soft,         2000.
1516  * Jolly Card (Evona Electronic),                    Evona Electronic    1998.
1617  * Jolly Card (croatian, set 1),                     TAB-Austria,        1985.
1718  * Jolly Card (croatian, set 2),                     Soft Design,        1993.
r7640r7641
4546  * Royal Vegas Joker Card (slow deal),               Funworld,           1993.
4647  * Royal Vegas Joker Card (fast deal),               Soft Design,        1993.
4748  * Royal Vegas Joker Card (fast deal, english gfx),  Soft Design,        1993.
49  * Royal Vegas Joker Card (fast deal, Mile),         Mile,               1993.
4850  * Jolly Joker (98bet, set 1).                       Impera,             198?.
4951  * Jolly Joker (98bet, set 2).                       Impera,             198?.
5052  * Jolly Joker (40bet, croatian hack),               Impera,             198?.
53  * Multi Win (Ver.0167, encrypted),                  Funworld,           1992.
5154  * Joker Card (Ver.A267BC, encrypted),               Vesely Svet,        1993.
5255  * Mongolfier New (italian),                         bootleg,            199?.
5356  * Soccer New (italian),                             bootleg,            199?.
5457  * Saloon (french, encrypted),                       unknown,            199?.
58  * Fun World Quiz (austrian),                        Funworld,           198?.
5559
5660
5761***********************************************************************************
r7640r7641
206210  Going through the code, there's not any NVRAM initialization routine through service 1 & 2.
207211
208212
209  * Jolly Card Professional 2.0 (Spale-Soft)
213  * Jolly Card Professional 2.0 (MZS Tech & Spale Soft)
210214
211215  Each 1st boot, this game show a generated code. You must enter this code in a DOS program to
212216  get the input codes necessary to allow boot the game.
r7640r7641
214218  This set is one of the most wanted for customers because is a real SCAM.
215219  The program has 2 hidden menues that allow change parameters without knowledge of the players.
216220
221  See more at ROM_LOAD section...
217222
223
218224  * Jolly Card (Evona Electronic)
219225
220226  This set has some hidden features.
r7640r7641
264270  "sta ($ZP)" instead of Y indexed. (like instruction 0x92 in stock 65c02's).
265271
266272
267  * Jolly Joker (Impera, 50bet)
273  * Jolly Joker (Impera)
268274
269275  To boot this game for 1st time, DSW should be in the following position:
270276  1=ON 2=OFF 3=ON 4=OFF 5=OFF 6=ON 7=ON 8=OFF
r7640r7641
273279  When numbers start to fill the screen, press RESET (key F3) again to start the game.
274280
275281
282  * (multi) Joker Card (Vesely).
283  * Multi Win (Funworld)
284
285  These sets seems to run in the same modified hardware.
286  They are encrypted, and have a second program rom with unknown code/purposes.
287
288
276289  * Mongolfier New
277290  * Soccer New
278291
r7640r7641
298311  This game should be moved to a new driver in a near future, as soon as we know a bit more about it.
299312
300313
314  * Fun World Quiz
301315
316  Beschreibung / Description
317  --------------------------
318
319  F?r OES 5,-- Einwurf werden 3 Kredite gegeben. F?r einen Kredit bekommt der Spieler
320  500 Spielpunkte. Bei jeder Frage kann der Spieler 100, 500 oder alle Punkte einsetzen.
321  Wird die Frage richtig beantwortet, wird der Einsatz aufaddiert. Erreicht der Spieler
322  nach 5 Fragen mehr als 2500 Punkte, bekommt er Bonusfragen. Das Spiel endet bei einer
323  falschen Beantwortung der Frage.
324
325  Insertion of ATS 5,- (Austrian Schilling coin) yields 5 credits. For 1 credit a player
326  receives 500 points. At each question a player can bet 100, 500 or all points. If a
327  question is answered correctly, the bet is added to the points. If a player reaches
328  more than 2500 points after 5 questions, he gets bonus questions. The game is over
329  after an incorrect answer.
330
331  Besides notes....
332
333  This machine is meant to work as "amusement", with high scores like another regular arcade.
334  You can set it as "bet mode", allowing to choose the amount of points to play, but can't be
335  turned to gambling mode (no payout, keyout, etc) for pubs, etc...
336
337  In bookkeeping mode (DIP switch #1):
338
339  Keep joystick left to clear bookkeeping.
340  Keep joystick up to clear high scores.
341  Keep joystick down to clear credits.
342  Keep joystick right to exit bookkeeping.
343
344  If the game has credits loaded, the bookkeeping mode will start
345  as soon as the current game ends.
346
347
348
302349***********************************************************************************
303350
304351
r7640r7641
372419  - Cleaned up and renamed all sets. Made parent-clone relationship.
373420
374421  [2005/12/15]
375  - Corrected CPU freq (2 MHz) in cuoreuno and elephfam (both have R65c02P2).
422  - Corrected CPU freq (2 MHz) in cuoreuno and elephfam (both have R65C02P2).
376423     (I suspect more games must have their CPU running at 2 MHz).
377424  - Corrected videoram and colorram offsets in cuoreuno and elephfam.
378425  - To initialize the NVRAM in cuoreuno and elephfam:
r7640r7641
405452  - Splitted the driver to driver/video.
406453
407454  - Corrected the screen size and visible area to magiccrd based on mc6845 registers.
408  - Added the remaining 2 GFX planes to magiccrd, but GFX are imperfect (bad decode or bad dump?). Color PROM need to be dumped.
455  - Added the remaining 2 GFX planes to magiccrd, but GFX are imperfect (bad decode or bad dump?).
456     Color PROM need to be dumped.
409457  - Royalcrd: Added all inputs and DIP switches.
410458     Fixed memory map, gfx decode
411459     Corrected screen size and visible area based on mc6845 registers.
r7640r7641
420468  - Fixed CPU clock to 2MHz. in all remaining games.
421469  - Fixed ay8910 frequency based on elephfam audio.
422470  - Fixed ay8910 volume in all games to avoid clipping.
423  - Reworked jolycdcr inputs: The game was designed to work only with remote credits. After nvram init, set the payout dip to "manual".
424  - Reworked jolycdit inputs: After nvram init, set the payout dip to "manual" to allow work the remote mode.
425  - Set jolycdat as bigdeal clone. The game has the same layout/behaviour instead of the normal jolly card games, even when are sharing gfx roms.
471  - Reworked jolycdcr inputs: The game was designed to work only with remote credits.
472     After nvram init, set the payout dip to "manual".
473  - Reworked jolycdit inputs: After nvram init, set the payout dip
474     to "manual" to allow work the remote mode.
475  - Set jolycdat as bigdeal clone. The game has the same layout/behaviour instead of the normal
476     jolly card games, even when they are sharing gfx roms.
426477  - Added the bipolar PROM and GAL to jolycdit. Confirmed the GFX ROMs as good dumps.
427  - Added an alternate set of Elephant Family. This one lacks of test mode and doesn't allow to switch between min-max bets through stop1.
428  - Added color PROMs to cuoreuno and elephfam sets but still no routed. Also added PLDs (protected, bad dumps).
478  - Added an alternate set of Elephant Family. This one lacks of test mode and doesn't allow
479     to switch between min-max bets through stop1.
480  - Added color PROMs to cuoreuno and elephfam sets but still no routed.
481     Also added PLDs (protected, bad dumps).
429482  - Corrected jollycrd screen size and visible area based on mc6845 registers.
430  - Hooked, wired and decoded the color prom in jollycrd sets based on jolycdit redump. Now colors are perfect.
431  - Wired and decoded the color prom in cuoreuno and elephfam sets. Now colors are perfect.
483  - Hooked, wired and decoded the color prom in jollycrd sets based on jolycdit redump.
484     Now colors are perfect.
485  - Wired and decoded the color prom in cuoreuno and elephfam sets.
486     Now colors are perfect.
432487  - Wired and decoded the color prom in royalcrd. Now colors are perfect.
433488  - Hooked, wired and decoded the color prom in bigdeal sets based on jolycdat (jollycrd palette).
434     Colors seems to be correct, but need to check against the real thing. Flagged as IMPERFECT_COLORS till a color PROM dump appear.
489     Colors seems to be correct, but need to check against the real thing.
490     Flagged as IMPERFECT_COLORS till a color PROM dump appear.
435491  - Decrypted jolycdit gfx roms.
436492  - Added set Jolly Card (Austria, encrypted).
437493  - Decrypted jolycdae and managed the planes to show correct colors. The set is working properly.
r7640r7641
543599  [2008/12/01]
544600  - Decripted saloon's program, graphics and color PROM.
545601  - Created a new memory map and machine driver for saloon.
546  - Removed set jolycdae (it's not coming from a real board).
602  - Removed set jolycdae (not coming from a real board).
547603  - Renamed the sets magiccrd, magiccda and magiccdb, to magicrd2, magicd2a and magicd2b.
548604  - Updated technical notes.
549605
r7640r7641
588644  - Changed default settings for some games, now that NVRAM is
589645     loaded externally.
590646
647  [2010/03/15]
648  - Removed all hacks in the rom load section. Now the involved sets
649     are properly loaded in the same way the hardware does.
650  - Replaced hardcoded values on graphics decode routines with proper
651     RGN_FRAC calculations.
652  - Fixed graphics bitplanes to involved games.
653  - Added more hardware/technical info.
654  - Modify the mongolnw machine driver. Now can see it starts.
655  - Added Multi Win, from Funworld. The set is encrypted and use a
656     custom CPU. Seems similar hardware than (multi) Joker Card.
657  - Added Fun World Quiz. Needs proper banking, and both graphics and
658     bipolar PROM redumps.
659  - Added Fun World Quiz description, and hardware notes.
591660
661  - Improved inputs for Fun World Quiz.
662  - Proper handlers and banking for Fun World Quiz questions.
663  - Partial decryption for royalcdc and multiwin.
664  - Complete Fun World Quiz DIP switches with dip locations.
665  - Promoted Fun World Quiz to working state.
666  - Added Fun World Quiz bookkeeping instructions notes.
667  - Turned lamps off as default state for all supported game.
668  - Changed default button-lamps layout to selective per game,
669     since some games need different one, and some games lack
670     of lamps at all.
671
672  - Reworked button-lamps layouts per game. Cleaned-up the code.
673  - Added specific button-lamps layout for bigdeal games.
674  - Added specific button-lamps layout for royalcrd & jolycdit,
675     but there is a bug in the d-up select code that lights the
676     wrong lamp. This is a leftover from jollycrd routines.
677  - Flagged vegasfte as GAME_NOT_WORKING, since is not receiving
678     any coins or remote credits anymore.
679
680  [2010/03/21]
681  - Added dual-state palette (addressable through PLDs).
682     This allow to choose which half of the palette will be addressed.
683  - Splitted the main machine driver to cover both palette states.
684  - Reworked inputs / DIP switches for vegasslw, vagasfst and vegasfte.
685  - Created new default NVRAM for Royal Vegas Joker Card sets.
686     These need to be configurated to be valid ones. Now vegasfte can
687     receive remote credits, and all three in the family have valid
688     min-max bet value and payout.
689  - Removed the not working flag from vegasfte.
690  - Improved colors for Big Deal sets.
691  - Correct colors for Royal Vegas Joker Card sets.
692
693  - Added a second set of Jolly Card Professional.
694     Documented the code differences.
695  - Added another Royal Vegas Joker Card set, from Mile.
696     These sets aren't intended to work with coins. Only remote credits
697     are allowed. There are external modules that can manage up to 4
698     machines simultaneously, adding/removing/watching credits.
699  - Added default NVRAM to the above sets.
700  - Added proper inputs and DIP switches to vegasmil.
701  - Replaced the jolyc980 default NVRAM with one totally clean.
702     Temporal and total meters are cleared to zero.
703
704
705
592706  *** TO DO ***
593707
594  - Figure out the royalcdc & jokercrd encryption.
708  - Figure out the royalcdc, jokercrd and multiwin encryption.
595709  - Figure out the remaining PIA connections for almost all games.
596710  - Fix Saloon and move it to its own driver.
597711  - Fix the imperfect sound in Magic Card II.
r7640r7641
599713     and Royal Card Professional 2.0 to get the proper codes to boot.
600714  - Analyze the unknown writes to $2000/$4000 in some games.
601715  - Check for the reads to the ay8910 output ports in some games.
602  - Figure out the MCU in monglfir and soccernw.
603  - Correct the ROM_REGION in some games to allow the use of RGN_FRAC
716  - Implement the MCU in monglfir and soccernw.
604717
605718
606719***********************************************************************************/
r7640r7641
613726#include "video/mc6845.h"
614727#include "machine/6821pia.h"
615728#include "sound/ay8910.h"
616#include "funworld.lh"
729#include "jollycrd.lh"
730#include "bigdeal.lh"
731#include "royalcrd.lh"
617732
618733/* from video */
619734extern UINT8* funworld_videoram;
r7640r7641
633748
634749static WRITE8_DEVICE_HANDLER(funworld_lamp_a_w)
635750{
636   coin_counter_w(device->machine, 0, data & 0x01);               /* credit in counter */
637751
638752   output_set_lamp_value(0, 1-((data >> 1) & 1));   /* button hold1 and */
639753   output_set_lamp_value(2, 1-((data >> 1) & 1));   /* hold3 (see pinouts) */
640754
641   coin_counter_w(device->machine, 7, data & 0x04);               /* credit out counter, mapped as coin 8 */
642
643755   output_set_lamp_value(1, 1-((data >> 3) & 1));   /* button hold2/low */
756   output_set_lamp_value(3, (data >> 7) & 1);      /* button hold4/high */
644757   output_set_lamp_value(5, 1-((data >> 5) & 1));   /* button 6 (collect/cancel) */
645   output_set_lamp_value(3, (data >> 7) & 1);      /* button hold4/high */
758
759   coin_counter_w(device->machine, 0, data & 0x01);   /* credit in counter */
760   coin_counter_w(device->machine, 7, data & 0x04);   /* credit out counter, mapped as coin 8 */
761
762//  popmessage("Lamps A: %02X", data);
646763}
647764
648765static WRITE8_DEVICE_HANDLER(funworld_lamp_b_w)
649766{
650767   output_set_lamp_value(4, (data >> 0) & 1);      /* button hold5/bet */
651768   output_set_lamp_value(6, (data >> 1) & 1);      /* button 7 (start/play) */
769
770//  popmessage("Lamps B: %02X", data);
652771}
653772
654773static WRITE8_DEVICE_HANDLER(pia1_ca2_w)
r7640r7641
679798   AM_RANGE(0xc000, 0xffff) AM_ROM
680799ADDRESS_MAP_END
681800
801static UINT8 funquiz_question_bank = 0x80;
802
803static READ8_HANDLER( questions_r )
804{
805   UINT8* quiz = memory_region(space->machine,"questions");
806   int extraoffset = ((funquiz_question_bank & 0x1f) * 0x8000);
807
808   // if 0x80 is set, read the 2nd half of the question rom (contains header info)
809   if (funquiz_question_bank & 0x80) extraoffset += 0x4000;
810
811   return quiz[offset + extraoffset];
812}
813
814static WRITE8_HANDLER( question_bank_w )
815{
816//  printf("question bank write %02x\n", data);
817   funquiz_question_bank = data;
818}
819
820static ADDRESS_MAP_START( funquiz_map, ADDRESS_SPACE_PROGRAM, 8 )
821   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
822   AM_RANGE(0x0800, 0x0803) AM_DEVREADWRITE("pia0", pia6821_r, pia6821_w)
823   AM_RANGE(0x0a00, 0x0a03) AM_DEVREADWRITE("pia1", pia6821_r, pia6821_w)
824   AM_RANGE(0x0c00, 0x0c00) AM_DEVREAD("ay8910", ay8910_r)
825   AM_RANGE(0x0c00, 0x0c01) AM_DEVWRITE("ay8910", ay8910_address_data_w)
826   AM_RANGE(0x0e00, 0x0e00) AM_DEVWRITE("crtc", mc6845_address_w)
827   AM_RANGE(0x0e01, 0x0e01) AM_DEVREADWRITE("crtc", mc6845_register_r, mc6845_register_w)
828
829   AM_RANGE(0x1800, 0x1800) AM_WRITE(question_bank_w)
830
831   AM_RANGE(0x2000, 0x2fff) AM_RAM_WRITE(funworld_videoram_w) AM_BASE(&funworld_videoram)
832   AM_RANGE(0x3000, 0x3fff) AM_RAM_WRITE(funworld_colorram_w) AM_BASE(&funworld_colorram)
833   AM_RANGE(0x4000, 0x7fff) AM_READ(questions_r)
834
835   AM_RANGE(0xc000, 0xffff) AM_ROM
836ADDRESS_MAP_END
837
682838static ADDRESS_MAP_START( magicrd2_map, ADDRESS_SPACE_PROGRAM, 8 )
683839   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
684840   AM_RANGE(0x0800, 0x0803) AM_DEVREADWRITE("pia0", pia6821_r, pia6821_w)
r7640r7641
710866   AM_RANGE(0x8000, 0xffff) AM_ROM
711867ADDRESS_MAP_END
712868
713static ADDRESS_MAP_START( royalmcu_map, ADDRESS_SPACE_PROGRAM, 8 )
714   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
715   AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("pia0", pia6821_r, pia6821_w)
716   AM_RANGE(0x2a00, 0x2a03) AM_DEVREADWRITE("pia1", pia6821_r, pia6821_w)
717   AM_RANGE(0x2c00, 0x2c00) AM_DEVREAD("ay8910", ay8910_r)
718   AM_RANGE(0x2c00, 0x2c01) AM_DEVWRITE("ay8910", ay8910_address_data_w)
719   AM_RANGE(0x2e00, 0x2e00) AM_DEVWRITE("crtc", mc6845_address_w)
720   AM_RANGE(0x2e01, 0x2e01) AM_DEVREADWRITE("crtc", mc6845_register_r, mc6845_register_w)
721   AM_RANGE(0x4000, 0x4fff) AM_RAM_WRITE(funworld_videoram_w) AM_BASE(&funworld_videoram)
722   AM_RANGE(0x5000, 0x5fff) AM_RAM_WRITE(funworld_colorram_w) AM_BASE(&funworld_colorram)
723   AM_RANGE(0x6000, 0xffff) AM_ROM
724ADDRESS_MAP_END
725
726869static ADDRESS_MAP_START( saloon_map, ADDRESS_SPACE_PROGRAM, 8 )
727870   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_SIZE_GENERIC(nvram)
728871   AM_RANGE(0x0800, 0x0800) AM_READ_PORT("IN0")
r7640r7641
14221565   PORT_DIPSETTING(    0x80, "Manual Payout SW" )
14231566INPUT_PORTS_END
14241567
1568static INPUT_PORTS_START( vegasslw )
1569   PORT_START("IN0")
1570   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )   PORT_NAME("Remote")
1571   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )   PORT_NAME("Hold 1")
1572   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL )   PORT_NAME("Cancel / Kasiraj (Take)")
1573   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )         PORT_NAME("Start / Kockaj (Double)")
1574   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )   PORT_NAME("Hold 5 / Ulog (Bet)")
1575   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )      PORT_NAME("Buch (Service1)")
1576   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )      PORT_NAME("Einstellen (Service2)")
1577   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )   PORT_NAME("Hold 4 / Velika (High)")
1578
1579   PORT_START("IN1")
1580   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )   PORT_NAME("Hold 2 / Mala (Low)")
1581   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )   PORT_NAME("Hold 3")
1582   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )         PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
1583   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1584   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE )      PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
1585   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
1586   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1587   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )   PORT_NAME("Abschreiben (Payout)")
1588
1589   PORT_START("IN2")
1590   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1591   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1592   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1593   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1594   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1595   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1596   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1597   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1598
1599   PORT_START("DSW")
1600   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:8")
1601   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
1602   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1603   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:7")
1604   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1605   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1606   PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:6")
1607   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1608   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1609   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:5")
1610   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1611   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1612   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:4")
1613   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1614   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1615   PORT_DIPNAME( 0x20, 0x00, "Joker" )            PORT_DIPLOCATION("SW1:3")
1616   PORT_DIPSETTING(    0x00, "With Joker" )      /* also enable Five of a Kind */
1617   PORT_DIPSETTING(    0x20, "Without Joker" )
1618   PORT_DIPNAME( 0x40, 0x00, "Hold" )            PORT_DIPLOCATION("SW1:2")
1619   PORT_DIPSETTING(    0x00, "Auto Hold" )
1620   PORT_DIPSETTING(    0x40, "No Auto Hold" )
1621
1622   /* after nvram init, set the following one to 'manual'
1623    to allow the remote credits mode to work */
1624   PORT_DIPNAME( 0x80, 0x00, "Payout" )         PORT_DIPLOCATION("SW1:1")
1625   PORT_DIPSETTING(    0x00, "Hopper" )
1626   PORT_DIPSETTING(    0x80, "Manual Payout SW" )
1627INPUT_PORTS_END
1628
1629static INPUT_PORTS_START( vegasfst )
1630   PORT_START("IN0")
1631   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )   PORT_NAME("Remote")
1632   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )   PORT_NAME("Hold 1")
1633   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL )   PORT_NAME("Cancel / Prihoduj (Take)")
1634   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )         PORT_NAME("Start / Dupliraj (Double)")
1635   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )   PORT_NAME("Hold 5 / Ulog (Bet)")
1636   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )      PORT_NAME("Buch (Service1)")
1637   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )      PORT_NAME("Einstellen (Service2)")
1638   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )   PORT_NAME("Hold 4 / Velika (High)")
1639
1640   PORT_START("IN1")
1641   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )   PORT_NAME("Hold 2 / Mala (Low)")
1642   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )   PORT_NAME("Hold 3")
1643   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )         PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
1644   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1645   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE )      PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
1646   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
1647   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1648   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )   PORT_NAME("Abschreiben (Payout)")
1649
1650   PORT_START("IN2")
1651   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1652   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1653   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1654   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1655   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1656   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1657   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1658   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1659
1660   PORT_START("DSW")
1661   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:8")
1662   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
1663   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1664   PORT_DIPNAME( 0x02, 0x02, "Remote" )         PORT_DIPLOCATION("SW1:7")
1665   PORT_DIPSETTING(    0x00, "100 Points/Pulse" )
1666   PORT_DIPSETTING(    0x02, "1000 Points/Pulse" )
1667   PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:6")
1668   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1669   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1670   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:5")
1671   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1672   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1673   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:4")
1674   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1675   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1676   PORT_DIPNAME( 0x20, 0x00, "Joker" )            PORT_DIPLOCATION("SW1:3")
1677   PORT_DIPSETTING(    0x00, "With Joker" )      /* also enable Five of a Kind */
1678   PORT_DIPSETTING(    0x20, "Without Joker" )
1679   PORT_DIPNAME( 0x40, 0x00, "Hold" )            PORT_DIPLOCATION("SW1:2")
1680   PORT_DIPSETTING(    0x00, "Auto Hold" )
1681   PORT_DIPSETTING(    0x40, "No Auto Hold" )
1682
1683   /* after nvram init, set the following one to 'manual'
1684    to allow the remote credits mode to work */
1685   PORT_DIPNAME( 0x80, 0x80, "Payout" )         PORT_DIPLOCATION("SW1:1")
1686   PORT_DIPSETTING(    0x00, "Hopper" )
1687   PORT_DIPSETTING(    0x80, "Manual Payout SW" )
1688INPUT_PORTS_END
1689
1690static INPUT_PORTS_START( vegasfte )
1691   PORT_START("IN0")
1692   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )   PORT_NAME("Remote")
1693   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )   PORT_NAME("Hold 1")
1694   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL )   PORT_NAME("Cancel / Kasiraj (Take)")
1695   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )         PORT_NAME("Start / Kockaj (Double)")
1696   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )   PORT_NAME("Hold 5 / +Ulog (Add Bet)")
1697   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )      PORT_NAME("Buch (Service1)")
1698   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )      PORT_NAME("Einstellen (Service2)")
1699   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )   PORT_NAME("Hold 4 / Velika (High) / -Ulog (Remove Bet)")
1700
1701   PORT_START("IN1")
1702   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )   PORT_NAME("Hold 2 / Mala (Low)")
1703   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )   PORT_NAME("Hold 3")
1704   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )         PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
1705   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1706   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE )      PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
1707   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
1708   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1709   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )   PORT_NAME("Abschreiben (Payout)")
1710
1711   PORT_START("IN2")
1712   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1713   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1714   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1715   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1716   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1717   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1718   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1719   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1720
1721   PORT_START("DSW")
1722   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:8")
1723   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
1724   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1725   PORT_DIPNAME( 0x02, 0x02, "Remote" )         PORT_DIPLOCATION("SW1:7")
1726   PORT_DIPSETTING(    0x00, "100 Points/Pulse" )
1727   PORT_DIPSETTING(    0x02, "1000 Points/Pulse" )
1728   PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:6")
1729   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1730   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1731   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:5")
1732   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1733   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1734   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:4")
1735   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1736   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1737   PORT_DIPNAME( 0x20, 0x00, "Joker" )            PORT_DIPLOCATION("SW1:3")
1738   PORT_DIPSETTING(    0x00, "With Joker" )      /* also enable Five of a Kind */
1739   PORT_DIPSETTING(    0x20, "Without Joker" )
1740   PORT_DIPNAME( 0x40, 0x00, "Hold" )            PORT_DIPLOCATION("SW1:2")
1741   PORT_DIPSETTING(    0x00, "Auto Hold" )
1742   PORT_DIPSETTING(    0x40, "No Auto Hold" )
1743
1744   /* after nvram init, set the following one to 'manual'
1745    to allow the remote credits mode to work */
1746   PORT_DIPNAME( 0x80, 0x80, "Payout" )         PORT_DIPLOCATION("SW1:1")
1747   PORT_DIPSETTING(    0x00, "Hopper" )
1748   PORT_DIPSETTING(    0x80, "Manual Payout SW" )
1749INPUT_PORTS_END
1750
1751static INPUT_PORTS_START( vegasmil )
1752   PORT_START("IN0")
1753   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )   PORT_NAME("Remote")
1754   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )   PORT_NAME("Hold 1")
1755   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL )   PORT_NAME("Cancel / Prihoduj (Take)")
1756   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )         PORT_NAME("Start / Dupliraj (Double)")
1757   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )   PORT_NAME("Hold 5 / Ulog (Bet)")
1758   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )      PORT_NAME("Buch (Service1)")
1759   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 )      PORT_NAME("Einstellen (Service2)")
1760   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )   PORT_NAME("Hold 4 / Velika (High)")
1761
1762   PORT_START("IN1")
1763   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )   PORT_NAME("Hold 2 / Mala (Low)")
1764   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )   PORT_NAME("Hold 3")
1765   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER )         PORT_NAME("Auszahlen") PORT_CODE(KEYCODE_E)
1766   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1767   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE )      PORT_NAME("Hopper Switch") PORT_CODE(KEYCODE_H)
1768   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
1769   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1770   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )   PORT_NAME("Abschreiben (Payout)")
1771
1772   PORT_START("IN2")
1773   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1774   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1775   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1776   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1777   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1778   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1779   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1780   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1781
1782   PORT_START("DSW")
1783   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:8")
1784   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
1785   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1786   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:7")
1787   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1788   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1789   PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:6")
1790   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1791   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1792   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:5")
1793   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1794   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1795   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )   PORT_DIPLOCATION("SW1:4")
1796   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1797   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1798   PORT_DIPNAME( 0x20, 0x00, "Joker" )            PORT_DIPLOCATION("SW1:3")
1799   PORT_DIPSETTING(    0x00, "With Joker" )      /* also enable Five of a Kind */
1800   PORT_DIPSETTING(    0x20, "Without Joker" )
1801   PORT_DIPNAME( 0x40, 0x00, "Hold" )            PORT_DIPLOCATION("SW1:2")
1802   PORT_DIPSETTING(    0x00, "Auto Hold" )
1803   PORT_DIPSETTING(    0x40, "No Auto Hold" )
1804
1805   /* after nvram init, set the following one to 'manual'
1806    to allow the remote credits mode to work */
1807   PORT_DIPNAME( 0x80, 0x00, "Payout" )         PORT_DIPLOCATION("SW1:1")
1808   PORT_DIPSETTING(    0x00, "Hopper" )
1809   PORT_DIPSETTING(    0x80, "Manual Payout SW" )
1810INPUT_PORTS_END
1811
1812
14251813static INPUT_PORTS_START( saloon )
14261814   PORT_START("IN0")
14271815   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_1)
r7640r7641
14901878   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
14911879INPUT_PORTS_END
14921880
1881static INPUT_PORTS_START( funquiz )
1882   PORT_START("IN0")
1883   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_Q)
1884   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )   // start?
1885   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )   // start?
1886   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START3 )   // start?
1887   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START4 )   // start or clear?
1888   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_W)
1889   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_E)
1890   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY   // joystick right, enter & exit bookkeeping???
14931891
1892   PORT_START("IN1")
1893   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY   // joystick left
1894   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY      // joystick up
1895   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY   // joystick down
1896   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_R)
1897   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_T)
1898   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )                                 // coin 2
1899   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_Y)
1900   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-8") PORT_CODE(KEYCODE_U)
1901
1902   PORT_START("IN2")
1903   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )                                 // coin 1
1904   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-2") PORT_CODE(KEYCODE_A)
1905   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-3") PORT_CODE(KEYCODE_S)
1906   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-4") PORT_CODE(KEYCODE_D)
1907   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-5") PORT_CODE(KEYCODE_F)
1908   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-6") PORT_CODE(KEYCODE_G)
1909   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-7") PORT_CODE(KEYCODE_H)
1910   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-8") PORT_CODE(KEYCODE_J)
1911
1912   PORT_START("DSW")
1913/*
1914  1 | Buchhaltung / Bookkeeping.
1915  2 | Nicht verwendet / Not used.
1916  3 | Ohne Zahlen (Wien) / No numbers (Vienna).
1917  4 | Nicht verwendet / Not used.
1918  5 | Nicht verwendet / Not used.
1919  6 | Richtige Antwort wird angezeigt / Right answer is shown.
1920  7 | Frage wird bei Einsatz angezeigt / Question is shown when bet is made.
1921  8 | Spiel mit Einsatzwahl / Game with betting.
1922*/
1923   PORT_DIPNAME( 0x01, 0x00, "Game with betting" )      PORT_DIPLOCATION("SW1:8")
1924   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
1925   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1926   PORT_DIPNAME( 0x02, 0x02, "Show question in bet stage" )   PORT_DIPLOCATION("SW1:7")
1927   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
1928   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1929   PORT_DIPNAME( 0x04, 0x04, "Right answer is shown" )   PORT_DIPLOCATION("SW1:6")
1930   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
1931   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1932   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )      PORT_DIPLOCATION("SW1:5")
1933   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1934   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1935   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )      PORT_DIPLOCATION("SW1:4")
1936   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
1937   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1938   PORT_DIPNAME( 0x20, 0x20, "No numbers (Vienna)" )   PORT_DIPLOCATION("SW1:3")
1939   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
1940   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1941   PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )      PORT_DIPLOCATION("SW1:2")
1942   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
1943   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1944   PORT_DIPNAME( 0x80, 0x80, "Bookkeeping" )         PORT_DIPLOCATION("SW1:1")
1945   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
1946   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1947INPUT_PORTS_END
1948
1949
14941950/*************************
14951951*    Graphics Layouts    *
14961952*************************/
r7640r7641
14981954static const gfx_layout charlayout =
14991955{
15001956   4,8,
1501   0x1000,
1502//  RGN_FRAC(1,2),
1957   RGN_FRAC(1,2),
15031958   4,
1504   { 0, 4, 0x8000*8, 0x8000*8+4 },
1505//  { RGN_FRAC(0,2), RGN_FRAC(0,2) + 4, RGN_FRAC(1,2), RGN_FRAC(1,2) + 4 },
1959   { RGN_FRAC(0,2), RGN_FRAC(0,2) + 4, RGN_FRAC(1,2), RGN_FRAC(1,2) + 4 },
15061960   { 3, 2, 1, 0 },
15071961   { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
15081962   8*4*2
r7640r7641
15131967* Graphics Decode Information *
15141968******************************/
15151969
1516static GFXDECODE_START( funworld )
1517   GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout, 0, 16 )
1970static GFXDECODE_START( fw1stpal )
1971   GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
15181972GFXDECODE_END
15191973
1974static GFXDECODE_START( fw2ndpal )
1975   GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x100, 16 )
1976GFXDECODE_END
15201977
1978
15211979/***********************
15221980*    PIA Interfaces    *
15231981***********************/
r7640r7641
15832041   DEVCB_NULL      /* IRQB */
15842042};
15852043
2044/* these ports are set to output anyway, but this quietens the log */
2045static READ8_DEVICE_HANDLER( funquiz_ay8910_a_r )
2046{
2047   return 0x00;
2048}
15862049
2050static READ8_DEVICE_HANDLER( funquiz_ay8910_b_r )
2051{
2052   return 0x00;
2053}
2054
15872055/************************
15882056*    Sound Interface    *
15892057************************/
r7640r7641
15982066   DEVCB_HANDLER(funworld_lamp_b_w)   /* portB out */
15992067};
16002068
2069static const ay8910_interface funquiz_ay8910_intf =
2070{
2071   AY8910_LEGACY_OUTPUT,
2072   AY8910_DEFAULT_LOADS,
2073   DEVCB_HANDLER(funquiz_ay8910_a_r),                     /* portA in  */
2074   DEVCB_HANDLER(funquiz_ay8910_b_r),                     /* portB in  */
2075   DEVCB_HANDLER(funworld_lamp_a_w),   /* portA out */
2076   DEVCB_HANDLER(funworld_lamp_b_w)   /* portB out */
2077};
16012078
16022079/************************
16032080*    CRTC Interface    *
r7640r7641
16222099*     Machine Drivers     *
16232100**************************/
16242101
1625static MACHINE_DRIVER_START( funworld )
2102static MACHINE_DRIVER_START( fw1stpal )
16262103    /* basic machine hardware */
16272104   MDRV_CPU_ADD("maincpu", M65SC02, MASTER_CLOCK/8)   /* 2MHz */
16282105   MDRV_CPU_PROGRAM_MAP(funworld_map)
r7640r7641
16422119   MDRV_SCREEN_SIZE((124+1)*4, (30+1)*8)            /* Taken from MC6845 init, registers 00 & 04. Normally programmed with (value-1) */
16432120   MDRV_SCREEN_VISIBLE_AREA(0*4, 96*4-1, 0*8, 29*8-1)   /* Taken from MC6845 init, registers 01 & 06 */
16442121
1645   MDRV_GFXDECODE(funworld)
2122   MDRV_GFXDECODE(fw1stpal)
16462123
1647   MDRV_DEFAULT_LAYOUT(layout_funworld)
1648
16492124   MDRV_PALETTE_LENGTH(0x200)
16502125   MDRV_PALETTE_INIT(funworld)
16512126   MDRV_VIDEO_START(funworld)
r7640r7641
16612136   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.5)   /* analyzed to avoid clips */
16622137MACHINE_DRIVER_END
16632138
2139static MACHINE_DRIVER_START( fw2ndpal )
2140   MDRV_IMPORT_FROM(fw1stpal)
2141
2142   MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8)   /* 2MHz */
2143
2144   MDRV_GFXDECODE(fw2ndpal)
2145MACHINE_DRIVER_END
2146
2147
2148
2149static MACHINE_DRIVER_START( funquiz )
2150   MDRV_IMPORT_FROM(fw1stpal)
2151
2152   MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8)   /* 2MHz */
2153   MDRV_CPU_PROGRAM_MAP(funquiz_map)
2154
2155   MDRV_SOUND_REPLACE("ay8910", AY8910, MASTER_CLOCK/8)   /* 2MHz */
2156   MDRV_SOUND_CONFIG(funquiz_ay8910_intf)
2157   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.5)
2158MACHINE_DRIVER_END
2159
2160
16642161static MACHINE_DRIVER_START( magicrd2 )
1665   MDRV_IMPORT_FROM(funworld)
2162   MDRV_IMPORT_FROM(fw1stpal)
16662163
16672164   MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8)   /* 2MHz */
16682165   MDRV_CPU_PROGRAM_MAP(magicrd2_map)
16692166
1670   MDRV_GFXDECODE(funworld)
16712167   MDRV_VIDEO_START(magicrd2)
16722168
16732169   MDRV_SOUND_REPLACE("ay8910", AY8910, MASTER_CLOCK/8)   /* 2MHz */
r7640r7641
16762172MACHINE_DRIVER_END
16772173
16782174static MACHINE_DRIVER_START( royalcrd )
1679   MDRV_IMPORT_FROM(funworld)
2175   MDRV_IMPORT_FROM(fw1stpal)
16802176
16812177   MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8)   /* (G65SC02P in pro version) 2MHz */
16822178   MDRV_CPU_PROGRAM_MAP(magicrd2_map)
16832179MACHINE_DRIVER_END
16842180
16852181static MACHINE_DRIVER_START( cuoreuno )
1686   MDRV_IMPORT_FROM(funworld)
2182   MDRV_IMPORT_FROM(fw1stpal)
16872183
16882184   MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8)   /* 2MHz */
16892185   MDRV_CPU_PROGRAM_MAP(cuoreuno_map)
16902186MACHINE_DRIVER_END
16912187
1692static MACHINE_DRIVER_START( royalmcu )
1693   MDRV_IMPORT_FROM(funworld)
1694
1695   MDRV_CPU_REPLACE("maincpu", M65SC02, MASTER_CLOCK/8)   /* 2MHz */
1696   MDRV_CPU_PROGRAM_MAP(royalmcu_map)
1697MACHINE_DRIVER_END
1698
16992188static MACHINE_DRIVER_START( saloon )
1700   MDRV_IMPORT_FROM(funworld)
2189   MDRV_IMPORT_FROM(fw1stpal)
17012190
17022191   MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8)   /* 2MHz */
17032192   MDRV_CPU_PROGRAM_MAP(saloon_map)
r7640r7641
17842273   ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
17852274
17862275   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1787   ROM_LOAD( "jollycrd_nvram.bin", 0x0000, 0x0800, CRC(8f0a86c9) SHA1(467bd4f601ac6aa818c036f1269c2d43d27854f6) )
2276   ROM_LOAD( "jollycrd_nvram.bin", 0x0000, 0x0800, CRC(8f0a86c9) SHA1(467bd4f601ac6aa818c036f1269c2d43d27854f6) )
17882277
17892278   ROM_REGION( 0x0200, "proms", 0 )
17902279   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
18002289   ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
18012290
18022291   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1803   ROM_LOAD( "jolyc3x3_nvram.bin", 0x0000, 0x0800, CRC(727c70cf) SHA1(3639b0891514064e21ebdb280791cc9c8f5ba481) )
2292   ROM_LOAD( "jolyc3x3_nvram.bin", 0x0000, 0x0800, CRC(727c70cf) SHA1(3639b0891514064e21ebdb280791cc9c8f5ba481) )
18042293
18052294   ROM_REGION( 0x0200, "proms", 0 )
18062295   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
18082297
18092298
18102299/*
1811    Jolly Card Professional 2.0
18122300
1813    Special version with maximum bet up to 98 credits.
1814    This game has an annoying password system through a DOS program.
2301  Jolly Card Professional 2.0
2302  ---------------------------
2303
2304  Special version with maximum bet up to 98/980 credits.
2305  This game has an annoying password system through a DOS program.
2306
2307
2308  differences:
2309  ----------------------------------------------------------
2310
2311  MZS Soft:
2312
2313  - All manufacturer strings, phones and dates.
2314  - Doesn't allow to clean partial IN/OUT meters.
2315
2316    $9FFF  LDX #$EA      ; Just clean 24 bytes from memory.
2317    $A001  LDA #$00
2318    $A003  STA $0300,X
2319    $A006  INX
2320    $A007  BNE $A003
2321    $A009  RTS
2322
2323  - The following unknown bytes...
2324
2325    $47EB - $47FF: 05 05 01 04 04  ; Unknown.
2326
2327  ----------------------------------------------------------
2328
2329  Spale Soft:
2330
2331  - All manufacturer strings, phones and dates.
2332
2333  - Allow to clean partial IN/OUT meters.
2334
2335    $9FFF  LDX #$00      ; Just clean 255 bytes from memory.
2336    $A001  LDA #$00
2337    $A003  STA $0300,X
2338    $A006  INX
2339    $A007  BNE $A003
2340    $A009  RTS
2341
2342  - The following unknown bytes...
2343
2344    $47EB - $47FF: 00 00 00 00 00  ; Unknown.
2345
2346  ----------------------------------------------------------
2347
2348  034E-034F: Partial IN.
2349  0360-0361: Partial OUT.
2350  044E-044F: Total IN.
2351  0460-0461: Total OUT.
2352
18152353*/
18162354
2355ROM_START( jolycmzs )
2356   ROM_REGION( 0x10000, "maincpu", 0 )   /* MZS Tech */
2357   ROM_LOAD( "mzstech.bin", 0x8000, 0x8000, CRC(cebd1e56) SHA1(24d88b3383cecf3829556d75460053663aab4ef1) )
2358
2359   ROM_REGION( 0x10000, "gfx1", 0 )
2360   ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
2361   ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
2362
2363/*  Load a default eeprom, otherwise an annoying password system should be inserted with
2364    inputs correlated to a code that pops up on the screen.
2365    This code should be inserted into a PC-DOS program, that program is nowhere to be found right now.
2366*/
2367   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2368   ROM_LOAD( "jolycmzs_nvram.bin", 0x0000, 0x0800, CRC(828ffeef) SHA1(6a52282231f1944ba79049f267a9c1941373aea2) )
2369
2370   ROM_REGION( 0x0200, "proms", 0 )
2371   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
2372ROM_END
2373
18172374ROM_START( jolyc980 )
1818   ROM_REGION( 0x10000, "maincpu", 0 )
2375   ROM_REGION( 0x10000, "maincpu", 0 )   /* Spale Soft */
18192376   ROM_LOAD( "j980.bin", 0x8000, 0x8000, CRC(48249fff) SHA1(390cd0eb3399446a66363dc6760458170e1970fd) )
18202377
18212378   ROM_REGION( 0x10000, "gfx1", 0 )
r7640r7641
18272384    This code should be inserted into a PC-DOS program, that program is nowhere to be found right now.
18282385*/
18292386   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1830   ROM_LOAD( "jolyc980_nvram.bin", 0x0000, 0x0800, CRC(c917f071) SHA1(fdcd974d3acd4acf2e0ff5fca820cfc65fe18867) )
2387   ROM_LOAD( "jolyc980_nvram.bin", 0x0000, 0x0800, CRC(ef2c89c7) SHA1(a286001e205dcd16d914e07ba2b7c820335ab9c2) )
18312388
18322389   ROM_REGION( 0x0200, "proms", 0 )
18332390   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
18432400   ROM_LOAD( "jollya.bin", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
18442401
18452402   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1846   ROM_LOAD( "jolycdev_nvram.bin", 0x0000, 0x0800, CRC(ae2c2fb8) SHA1(912d673ea8e26ff62520a7b86e702e5260cff4c0) )
2403   ROM_LOAD( "jolycdev_nvram.bin", 0x0000, 0x0800, CRC(ae2c2fb8) SHA1(912d673ea8e26ff62520a7b86e702e5260cff4c0) )
18472404
18482405   ROM_REGION( 0x0200, "proms", 0 )
18492406   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
18662423          - 1x KM6264AL-10
18672424
18682425    - 1x Crystal : 16.000 MHz
2426
2427    These croatian sets are not meant to work with coins...
2428    Only remote credits, as can be seen in test mode.
18692429*/
18702430
18712431ROM_START( jolyccra )   /* Jolly Card (croatian, set 1) */
r7640r7641
18772437   ROM_LOAD( "jollya.bin", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
18782438
18792439   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1880   ROM_LOAD( "jolyccra_nvram.bin", 0x0000, 0x0800, CRC(478ab0a9) SHA1(8c5160d2ac8d4a9db0ae1e478d3bb1513a04544f) )
2440   ROM_LOAD( "jolyccra_nvram.bin", 0x0000, 0x0800, CRC(478ab0a9) SHA1(8c5160d2ac8d4a9db0ae1e478d3bb1513a04544f) )
18812441
18822442   ROM_REGION( 0x0200, "proms", 0 )
18832443   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
18932453   ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
18942454
18952455   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1896   ROM_LOAD( "jolyccrb_nvram.bin", 0x0000, 0x0800, CRC(c1d49c88) SHA1(27ffdedfc7f09ff11c3b2537db3681473b776074) )
2456   ROM_LOAD( "jolyccrb_nvram.bin", 0x0000, 0x0800, CRC(c1d49c88) SHA1(27ffdedfc7f09ff11c3b2537db3681473b776074) )
18972457
18982458   ROM_REGION( 0x0200, "proms", 0 )
18992459   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
19312491   ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(43bcb2df) SHA1(5022bc3a0b852a7cd433e25c3c90a720e6328261) )
19322492
19332493   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1934   ROM_LOAD( "jolycdit_nvram.bin", 0x0000, 0x0800, CRC(c55c6706) SHA1(a38ae926f057fb47e48ca841b2d097fc4fd06416) )
2494   ROM_LOAD( "jolycdit_nvram.bin", 0x0000, 0x0800, CRC(c55c6706) SHA1(a38ae926f057fb47e48ca841b2d097fc4fd06416) )
19352495
19362496   ROM_REGION( 0x0200, "proms", 0 )
19372497   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
19672527
19682528    jolycdib program seems to be the original for blue TAB PCB.
19692529    jolycdit has some code patches and redirected parts to suspicious offsets (as d500, d000, etc)
2530
2531    This sets is not meant to work with coins...
2532    Only remote credits, as can be seen in test mode.
19702533*/
19712534
19722535ROM_START( jolycdib )   /* bootleg PCB, encrypted graphics */
r7640r7641
19782541   ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(43bcb2df) SHA1(5022bc3a0b852a7cd433e25c3c90a720e6328261) )
19792542
19802543   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
1981   ROM_LOAD( "jolycdib_nvram.bin", 0x0000, 0x0800, CRC(038a71fe) SHA1(99d3befbee8f9f86ce7f074de7f16fb25053c077) )
2544   ROM_LOAD( "jolycdib_nvram.bin", 0x0000, 0x0800, CRC(038a71fe) SHA1(99d3befbee8f9f86ce7f074de7f16fb25053c077) )
19822545
19832546   ROM_REGION( 0x0200, "proms", 0 )
19842547   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
19972560   ROM_LOAD( "sj1.bin", 0x8000, 0x8000, CRC(82741749) SHA1(d0bf3073dff9ba1c4913fd754f965951e9cb5b03) )
19982561
19992562   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2000   ROM_LOAD( "sjcd2kx3_nvram.bin", 0x0000, 0x0800, CRC(1141368b) SHA1(b4af2d59b5e8115440e1219a621cfd2fb8c2c978) )
2563   ROM_LOAD( "sjcd2kx3_nvram.bin", 0x0000, 0x0800, CRC(1141368b) SHA1(b4af2d59b5e8115440e1219a621cfd2fb8c2c978) )
20012564
20022565   ROM_REGION( 0x0200, "proms", 0 )
20032566   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
r7640r7641
20392602   ROM_LOAD( "poker4.003", 0x0000, 0x8000, CRC(8c33a15f) SHA1(a1c8451c99a23eeffaedb21d1a1b69f54629f8ab) )
20402603   ROM_LOAD( "poker4.002", 0x8000, 0x8000, CRC(5f4e12d8) SHA1(014b2364879faaf4922cdb82ee07692389f20c2d) )
20412604
2042   ROM_REGION( 0x0200, "proms", 0 )   /* using jollycrd palette till a correct dump appear */
2043   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
2605   ROM_REGION( 0x0200, "proms", 0 )   /* using joker card palette till a correct dump appear */
2606   ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, BAD_DUMP CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
20442607ROM_END
20452608
20462609
r7640r7641
20522615   ROM_LOAD( "poker4.003", 0x0000, 0x8000, CRC(8c33a15f) SHA1(a1c8451c99a23eeffaedb21d1a1b69f54629f8ab) )
20532616   ROM_LOAD( "poker4.002", 0x8000, 0x8000, CRC(5f4e12d8) SHA1(014b2364879faaf4922cdb82ee07692389f20c2d) )
20542617
2055   ROM_REGION( 0x0200, "proms", 0 )   /* using jollycrd palette till a correct dump appear */
2056   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
2618   ROM_REGION( 0x0200, "proms", 0 )   /* using joker card palette till a correct dump appear */
2619   ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, BAD_DUMP CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
20572620ROM_END
20582621
20592622
r7640r7641
20702633          - 1x KM6264AL-10
20712634
20722635    - 1x Crystal : 16.000 MHz
2636
2637    This set behaves like Big Deal & Bonus Card.
20732638*/
20742639
20752640ROM_START( jolycdat )   /* there are unused pieces of code that compare or jumps within $4000-$5000 range */
r7640r7641
20812646   ROM_LOAD( "jolycard.ch2", 0x0000, 0x8000, CRC(c512b103) SHA1(1f4e78e97855afaf0332fb75e1b5571aafd01c29) )
20822647   ROM_LOAD( "jolycard.ch1", 0x8000, 0x8000, CRC(0f24f39d) SHA1(ac1f6a8a4a2a37cbc0d45c15187b33c25371bffb) )
20832648
2084   ROM_REGION( 0x0200, "proms", 0 )   /* using jollycrd palette till a correct dump appear */
2085   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
2649   ROM_REGION( 0x0200, "proms", 0 )   /* using joker card palette till a correct dump appear */
2650   ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, BAD_DUMP CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
20862651ROM_END
20872652
20882653
r7640r7641
21152680   ROM_LOAD( "cuore1c.u22", 0x8000, 0x8000, CRC(253fac84) SHA1(1ad104ab8e8d73df6397a840a4b26565b245d7a3) )
21162681
21172682   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2118   ROM_LOAD( "cuoreuno_nvram.bin", 0x0000, 0x0800, CRC(b5a1bf25) SHA1(c2996a28c080debf10ab7a7dc47c305aed172a83) )
2683   ROM_LOAD( "cuoreuno_nvram.bin", 0x0000, 0x0800, CRC(b5a1bf25) SHA1(c2996a28c080debf10ab7a7dc47c305aed172a83) )
21192684
21202685   ROM_REGION( 0x0200, "proms", 0 )
21212686   ROM_LOAD( "am27s29_cu.bin",    0x0000, 0x0200, CRC(7ea61749) SHA1(3167acd79f9bda2078c2af3e049ad6abf160aeae) )
r7640r7641
21452710    - 1x trimmer (volume)
21462711    - 1x 8 DIP switches
21472712    - 1x battery
2713
2714    u2.bin    1ST AND 2ND HALF IDENTICAL
2715    u20.bin   1ST AND 2ND HALF IDENTICAL
2716    u21.bin   1ST AND 2ND HALF IDENTICAL
21482717*/
21492718
21502719ROM_START( elephfam )
2151   ROM_REGION( 0x18000, "maincpu", 0 )
2152   ROM_LOAD( "eleph_a.u2", 0x8000, 0x10000, CRC(8392b842) SHA1(74c850c734ca8174167b2f826b9b1ac902669392) )
2720   ROM_REGION( 0x10000, "maincpu", 0 )
2721   ROM_LOAD( "eleph_a.u2",  0x8000, 0x8000, CRC(8392b842) SHA1(74c850c734ca8174167b2f826b9b1ac902669392) )
2722   ROM_IGNORE(                      0x8000 )   /* Identical halves. Discarding 2nd half */
21532723
2154   ROM_REGION( 0x20000, "gfx1", 0 )
2155   ROM_LOAD( "eleph_c.u22", 0x00000, 0x10000, CRC(4b909bf3) SHA1(a822b12126bc58af6d3f999ab2117370015a039b) )
2156   ROM_LOAD( "eleph_b.u21", 0x10000, 0x10000, CRC(e3612670) SHA1(beb65f7d2bd6d7bc68cfd876af51910cf6417bd0) )
2157   ROM_COPY( "gfx1",    0x10000, 0x00000, 0x8000 ) /* rgn, srcoffset, offset, length */
2724   ROM_REGION( 0x10000, "gfx1", 0 )
2725   ROM_LOAD( "eleph_b.u21", 0x0000, 0x8000, CRC(e3612670) SHA1(beb65f7d2bd6d7bc68cfd876af51910cf6417bd0) )
2726   ROM_IGNORE(                      0x8000 )   /* Identical halves. Discarding 2nd half */
2727   ROM_LOAD( "eleph_c.u22", 0x8000, 0x8000, CRC(4b909bf3) SHA1(a822b12126bc58af6d3f999ab2117370015a039b) )
2728   ROM_IGNORE(                      0x8000 )   /* Identical halves. Discarding 2nd half */
21582729
21592730   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2160   ROM_LOAD( "elephfam_nvram.bin", 0x0000, 0x0800, CRC(fb9b1100) SHA1(cf15ce55042f1c4399fec480c2f862622905a8b5) )
2731   ROM_LOAD( "elephfam_nvram.bin", 0x0000, 0x0800, CRC(fb9b1100) SHA1(cf15ce55042f1c4399fec480c2f862622905a8b5) )
21612732
21622733   ROM_REGION( 0x0200, "proms", 0 )
21632734   ROM_LOAD( "am27s29_ef.u25",    0x0000, 0x0200, CRC(bca8b82a) SHA1(4aa19f5ecd9953bf8792dceb075a746f77c01cfc) )
r7640r7641
21782749   ROM_LOAD( "elephc.u20", 0x8000, 0x8000, CRC(448ba955) SHA1(2785cbc8cd42a7dda85bd8b81d5fbec01a1ba0bd) )
21792750
21802751   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2181   ROM_LOAD( "elephfmb_nvram.bin", 0x0000, 0x0800, CRC(13a0cfea) SHA1(9c8ce509ef1076e88ea853347b64c5591bc2e18c) )
2752   ROM_LOAD( "elephfmb_nvram.bin", 0x0000, 0x0800, CRC(13a0cfea) SHA1(9c8ce509ef1076e88ea853347b64c5591bc2e18c) )
21822753
21832754   ROM_REGION( 0x0200, "proms", 0 )
21842755   ROM_LOAD( "am27s29_ef.u25",    0x0000, 0x0200, CRC(bca8b82a) SHA1(4aa19f5ecd9953bf8792dceb075a746f77c01cfc) )
r7640r7641
23002871   ROM_LOAD( "pool10_nvram.bin",  0x0000, 0x0800, CRC(2f2fab43) SHA1(f815b70c171bad99fa6a60c256e4fdc85dd6b290) )
23012872
23022873   ROM_REGION( 0x0200, "proms", 0 )
2303   ROM_LOAD( "n82s147an_p10.u25",    0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
2874   ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
23042875
23052876   ROM_REGION( 0x0600, "plds", 0 )
23062877   ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
r7640r7641
23092880ROM_END
23102881
23112882
2312ROM_START( pool10b )   /* this set should be the parent */
2313   ROM_REGION( 0x18000, "maincpu", 0 )
2314   ROM_LOAD( "u2.bin", 0x8000, 0x10000, CRC(64fee38e) SHA1(8a624a0b6eb4a3ba09e5b396dc5a01994dfdf294) )
2883/*
2884  - pool10b -
23152885
2886  u2.bin    1ST AND 2ND HALF IDENTICAL
2887  u20.bin   1ST AND 2ND HALF IDENTICAL
2888  u21.bin   1ST AND 2ND HALF IDENTICAL
2889*/
2890   ROM_START( pool10b )   /* this set should be the parent */
2891   ROM_REGION( 0x10000, "maincpu", 0 )
2892   ROM_LOAD( "u2.bin", 0x8000, 0x8000, CRC(64fee38e) SHA1(8a624a0b6eb4a3ba09e5b396dc5a01994dfdf294) )
2893   ROM_IGNORE(                 0x8000 )   /* Identical halves. Discarding 2nd half */
2894
23162895   /* GFX ROMs are the same of pool10, but double sized with identical halves. */
2317   ROM_REGION( 0x20000, "gfx1", 0 )
2318   ROM_LOAD( "u20.bin", 0x00000, 0x10000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) )
2319   ROM_LOAD( "u21.bin", 0x10000, 0x10000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) )
2320   ROM_COPY( "gfx1",    0x10000, 0x00000, 0x8000 ) /* rgn, srcoffset, offset, length */
2896   ROM_REGION( 0x10000, "gfx1", 0 )
2897   ROM_LOAD( "u21.bin", 0x0000, 0x8000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) )
2898   ROM_IGNORE(                  0x8000 )   /* Identical halves. Discarding 2nd half */
2899   ROM_LOAD( "u20.bin", 0x8000, 0x8000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) )
2900   ROM_IGNORE(                  0x8000 )   /* Identical halves. Discarding 2nd half */
23212901
23222902   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2323   ROM_LOAD( "pool10b_nvram.bin",  0x0000, 0x0800, CRC(d9f35299) SHA1(2c3608bc9c322a9cc86f74d8fa2f660804a8cf3c) )
2903   ROM_LOAD( "pool10b_nvram.bin",  0x0000, 0x0800, CRC(d9f35299) SHA1(2c3608bc9c322a9cc86f74d8fa2f660804a8cf3c) )
23242904
23252905   ROM_REGION( 0x0200, "proms", 0 )
2326   ROM_LOAD( "n82s147an_p10.u25",    0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
2906   ROM_LOAD( "n82s147an_p10.u25",   0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
23272907
23282908   ROM_REGION( 0x0600, "plds", 0 )
23292909   ROM_LOAD( "palce16v8h_p10b.u5",  0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
r7640r7641
23412921   ROM_LOAD( "c.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
23422922
23432923   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2344   ROM_LOAD( "pool10c_nvram.bin", 0x0000, 0x0800, CRC(396aefed) SHA1(066b87ff054dfb37f733a812ad0dc1b1bd2478e6) )
2924   ROM_LOAD( "pool10c_nvram.bin", 0x0000, 0x0800, CRC(396aefed) SHA1(066b87ff054dfb37f733a812ad0dc1b1bd2478e6) )
23452925
23462926   ROM_REGION( 0x0200, "proms", 0 )
2347   ROM_LOAD( "n82s147an_p10.u25",    0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
2927   ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
23482928
23492929   ROM_REGION( 0x0600, "plds", 0 )
23502930   ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
r7640r7641
23532933ROM_END
23542934
23552935
2356ROM_START( pool10d )
2357   ROM_REGION( 0x18000, "maincpu", 0 )
2358   ROM_LOAD( "3.50.u2", 0x8000, 0x10000, CRC(4c68e1f4) SHA1(bbab63a18e0c041ce519daa32e12dd1b6a672dce) )
2936/*
2937    - pool10d -
23592938
2939    3.50.u2   1ST AND 2ND HALF IDENTICAL
2940*/
2941   ROM_START( pool10d )
2942   ROM_REGION( 0x10000, "maincpu", 0 )
2943   ROM_LOAD( "3.50.u2", 0x8000, 0x8000, CRC(4c68e1f4) SHA1(bbab63a18e0c041ce519daa32e12dd1b6a672dce) )
2944   ROM_IGNORE(                  0x8000 )   /* Identical halves. Discarding 2nd half */
2945
23602946   ROM_REGION( 0x10000, "gfx1", 0 )
23612947   ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) )
23622948   ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) )
23632949
23642950   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2365   ROM_LOAD( "pool10d_nvram.bin", 0x0000, 0x0800, CRC(6b5984a0) SHA1(156a94e74e33b1a15222cffff9b62e65f6f5f2f5) )
2951   ROM_LOAD( "pool10d_nvram.bin", 0x0000, 0x0800, CRC(6b5984a0) SHA1(156a94e74e33b1a15222cffff9b62e65f6f5f2f5) )
23662952
23672953   ROM_REGION( 0x0200, "proms", 0 )
2368   ROM_LOAD( "n82s147an_p10.u25",    0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
2954   ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
23692955
23702956   ROM_REGION( 0x0600, "plds", 0 )
23712957   ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
r7640r7641
24042990   ROM_LOAD( "tortu.c.u20", 0x8000, 0x8000, CRC(3cda6f73) SHA1(b4f3d2d3c652ebf6973358ae33b7808de5939acd) )
24052991
24062992   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2407   ROM_LOAD( "tortufam_nvram.bin", 0x0000, 0x0800, CRC(e5a08b1b) SHA1(6575ed3ec66ef0e42129225fe1679519e5e1c946) )
2993   ROM_LOAD( "tortufam_nvram.bin", 0x0000, 0x0800, CRC(e5a08b1b) SHA1(6575ed3ec66ef0e42129225fe1679519e5e1c946) )
24082994
24092995   ROM_REGION( 0x0200, "proms", 0 )
2410   ROM_LOAD( "am27s29pc_tf.u25",    0x0000, 0x0200, CRC(c6d433fb) SHA1(065de832bbe8765eb0aacc2029e587a4f5362f8a) )
2996   ROM_LOAD( "am27s29pc_tf.u25", 0x0000, 0x0200, CRC(c6d433fb) SHA1(065de832bbe8765eb0aacc2029e587a4f5362f8a) )
24112997
24122998   ROM_REGION( 0x0600, "plds", 0 )
24132999   ROM_LOAD( "palce20v8h_tf.u5",  0x0000, 0x0157, NO_DUMP ) /* PAL is read protected */
r7640r7641
24463032   ROM_LOAD( "boat_1.bin", 0x8000, 0x8000, CRC(61fd8c19) SHA1(eb8fd8bd7de38a6c8a435e9e36daf699162138a5) )
24473033
24483034   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2449   ROM_LOAD( "bottle10_nvram.bin", 0x0000, 0x0800, CRC(82927c53) SHA1(8cde91588cb53fefc84f0b14fc5c0b26a3a445eb) )
3035   ROM_LOAD( "bottle10_nvram.bin", 0x0000, 0x0800, CRC(82927c53) SHA1(8cde91588cb53fefc84f0b14fc5c0b26a3a445eb) )
24503036
24513037   ROM_REGION( 0x0200, "proms", 0 )
2452   ROM_LOAD( "n82s147an_p10.u25",    0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
3038   ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
24533039
24543040   ROM_REGION( 0x0600, "plds", 0 )
24553041   ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
r7640r7641
24673053   ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(61fd8c19) SHA1(eb8fd8bd7de38a6c8a435e9e36daf699162138a5) )
24683054
24693055   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2470   ROM_LOAD( "bottl10b_nvram.bin", 0x0000, 0x0800, CRC(59976182) SHA1(f8d26169e86444607bc5a6649f41e7f5c05ddbb4) )
3056   ROM_LOAD( "bottl10b_nvram.bin", 0x0000, 0x0800, CRC(59976182) SHA1(f8d26169e86444607bc5a6649f41e7f5c05ddbb4) )
24713057
24723058   ROM_REGION( 0x0200, "proms", 0 )
2473   ROM_LOAD( "n82s147an_p10.u25",    0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
3059   ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) )
24743060
24753061   ROM_REGION( 0x0600, "plds", 0 )
24763062   ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
r7640r7641
25133099   ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) )
25143100
25153101   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2516   ROM_LOAD( "royalcrd_nvram.bin", 0x0000, 0x0800, CRC(335bfa5a) SHA1(7e9cbb502f450c515ea03ffcf4b7fbae60af4e73) )
3102   ROM_LOAD( "royalcrd_nvram.bin", 0x0000, 0x0800, CRC(335bfa5a) SHA1(7e9cbb502f450c515ea03ffcf4b7fbae60af4e73) )
25173103
25183104   ROM_REGION( 0x0200, "proms", 0 )
2519   ROM_LOAD( "n82s147.bin",    0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
3105   ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
25203106
25213107   ROM_REGION( 0x0600, "plds", 0 )
2522   ROM_LOAD( "palce16v8h-4.bin",  0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
2523   ROM_LOAD( "1-peel18cv8.bin",   0x0200, 0x0155, NO_DUMP ) /* PEEL is read protected */
2524   ROM_LOAD( "2-peel18cv8.bin",   0x0400, 0x0155, CRC(8fdafd55) SHA1(fbb187ba682111648ea1586f400990cb81a3077a) )
3108   ROM_LOAD( "palce16v8h-4.bin", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
3109   ROM_LOAD( "1-peel18cv8.bin",  0x0200, 0x0155, NO_DUMP ) /* PEEL is read protected */
3110   ROM_LOAD( "2-peel18cv8.bin",  0x0400, 0x0155, CRC(8fdafd55) SHA1(fbb187ba682111648ea1586f400990cb81a3077a) )
25253111ROM_END
25263112
25273113
r7640r7641
25453131*/
25463132
25473133ROM_START( royalcdb ) /* both halves have different programs. we're using the 2nd one */
2548   ROM_REGION( 0x20000, "maincpu", 0 )   /* 1st half prg is testing RAM in offset $8600-$BF00...?? */
2549   ROM_LOAD( "rc.bin", 0x10000, 0x10000, CRC(8a9a6dd6) SHA1(04c3f9f17d5404ac1414c51ef8f930df54530e72) )
2550   ROM_COPY( "maincpu",   0x18000, 0x8000, 0x8000 )
3134   ROM_REGION( 0x10000, "maincpu", 0 )   /* 1st half prg is testing RAM in offset $8600-$BF00...?? */
3135   ROM_LOAD( "rc.bin", 0x0000, 0x10000, CRC(8a9a6dd6) SHA1(04c3f9f17d5404ac1414c51ef8f930df54530e72) )
25513136
2552   ROM_REGION( 0x20000, "gfx1", 0 )
2553   ROM_LOAD( "1a.bin", 0x0000, 0x10000, CRC(8a66f22c) SHA1(67d6e8f8f5a0fd979dc498ba2cc67cf707ccdf95) )
2554   ROM_LOAD( "2a.bin", 0x10000, 0x10000, CRC(3af71cf8) SHA1(3a0ce0d0abebf386573c5936545dada1d3558e55) )
2555   ROM_COPY( "gfx1",    0x10000, 0x00000, 0x8000 )   /* rgn, srcoffset, offset, length */
3137   ROM_REGION( 0x10000, "gfx1", 0 )
3138   ROM_LOAD( "2a.bin", 0x0000, 0x8000, CRC(3af71cf8) SHA1(3a0ce0d0abebf386573c5936545dada1d3558e55) )
3139   ROM_IGNORE(                 0x8000 )   /* Identical halves. Discarding 2nd half */
3140   ROM_LOAD( "1a.bin", 0x8000, 0x8000, CRC(8a66f22c) SHA1(67d6e8f8f5a0fd979dc498ba2cc67cf707ccdf95) )
3141   ROM_IGNORE(                 0x8000 )   /* Identical halves. Discarding 2nd half */
25563142
25573143   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2558   ROM_LOAD( "royalcdb_nvram.bin", 0x0000, 0x0800, CRC(3b03440f) SHA1(49e51b8c9e1404d39c479a2d0619aab43f1a6529) )
3144   ROM_LOAD( "royalcdb_nvram.bin", 0x0000, 0x0800, CRC(3b03440f) SHA1(49e51b8c9e1404d39c479a2d0619aab43f1a6529) )
25593145
25603146   ROM_REGION( 0x0200, "proms", 0 )
2561   ROM_LOAD( "n82s147.bin",    0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
3147   ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
25623148
25633149   ROM_REGION( 0x0200, "plds", 0 )
2564   ROM_LOAD( "palce16v8h-4.bin",   0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
3150   ROM_LOAD( "palce16v8h-4.bin", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
25653151ROM_END
25663152
25673153
r7640r7641
25893175*/
25903176
25913177ROM_START( royalcdc )   /* encrypted program rom */
2592   ROM_REGION( 0x10000, "maincpu", 0 )
3178   ROM_REGION( 0x10000*2, "maincpu", 0 ) // *2 for decrypted opcodes (see init)
25933179   ROM_LOAD( "rc_1.bin", 0x8000, 0x8000, CRC(8cdcc978) SHA1(489b58760a7c8646399c8cdfb86ec4341823e7dd) )
25943180
25953181   ROM_REGION( 0x10000, "gfx1", 0 )
r7640r7641
25973183   ROM_LOAD( "rc_2.bin", 0x8000, 0x8000, CRC(7f934488) SHA1(c537a09ef7e88a81ee9c2e1d971b3caf9d3dba0e) )
25983184
25993185   ROM_REGION( 0x0200, "proms", 0 )
2600   ROM_LOAD( "82s147.bin",    0x0000, 0x0200, CRC(44dbf086) SHA1(43a2d615c00605db75a4fd4d57d9e056c0356f10) )
3186   ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(44dbf086) SHA1(43a2d615c00605db75a4fd4d57d9e056c0356f10) )
26013187
26023188   ROM_REGION( 0x0600, "plds", 0 )
2603   ROM_LOAD( "palce16v8.bin",  0x0000, 0x0117, NO_DUMP )   /* not present in the set */
2604   ROM_LOAD( "1-peel18cv8p.bin",   0x0200, 0x0155, NO_DUMP )   /* not present in the set */
2605   ROM_LOAD( "2-peel18cv8p.bin",   0x0400, 0x0155, NO_DUMP )   /* not present in the set */
3189   ROM_LOAD( "palce16v8.bin",    0x0000, 0x0117, NO_DUMP )   /* not present in the set */
3190   ROM_LOAD( "1-peel18cv8p.bin", 0x0200, 0x0155, NO_DUMP )   /* not present in the set */
3191   ROM_LOAD( "2-peel18cv8p.bin", 0x0400, 0x0155, NO_DUMP )   /* not present in the set */
26063192ROM_END
26073193
26083194
r7640r7641
26313217   ROM_LOAD( "l1.bin", 0x8000, 0x8000, CRC(beadc35c) SHA1(8a6a5954a827def8c4c3b904d8ee58a4bde53d85) )
26323218
26333219   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2634   ROM_LOAD( "lluck3x3_nvram.bin", 0x0000, 0x0800, CRC(2fe79cff) SHA1(7839c04336b7702c7bdcd2b6917a353f4376f824) )
3220   ROM_LOAD( "lluck3x3_nvram.bin", 0x0000, 0x0800, CRC(2fe79cff) SHA1(7839c04336b7702c7bdcd2b6917a353f4376f824) )
26353221
26363222   ROM_REGION( 0x0200, "proms", 0 )
2637   ROM_LOAD( "n82s147.bin",    0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
3223   ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
26383224ROM_END
26393225
26403226
r7640r7641
26473233   ROM_LOAD( "l1.bin", 0x8000, 0x8000, CRC(beadc35c) SHA1(8a6a5954a827def8c4c3b904d8ee58a4bde53d85) )
26483234
26493235   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2650   ROM_LOAD( "lluck4x1_nvram.bin", 0x0000, 0x0800, CRC(05d2d7b8) SHA1(1188b2b4835cadd95b1e9160c2948a2e3457afd2) )
3236   ROM_LOAD( "lluck4x1_nvram.bin", 0x0000, 0x0800, CRC(05d2d7b8) SHA1(1188b2b4835cadd95b1e9160c2948a2e3457afd2) )
26513237
26523238   ROM_REGION( 0x0200, "proms", 0 )
2653   ROM_LOAD( "n82s147.bin",    0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
3239   ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) )
26543240ROM_END
26553241
26563242
r7640r7641
26673253
26683254    Some versions have Mexican Rockwell R65c02.
26693255    The game doesn't work with a regular 65c02 CPU.
3256
3257    There are different programs that carry the same
3258    graphics set for green TAB / Impera boards.
3259
3260    TAB blue boards can run the same programs, but needs
3261    the encrypted graphics set.
26703262*/
26713263
26723264ROM_START( magicrd2 )   /* Impera */
2673   ROM_REGION( 0x18000, "maincpu", 0 )
2674   ROM_LOAD( "magicard.004", 0x0000, 0x8000,  CRC(f6e948b8) SHA1(7d5983015a508ab135ccbf69b7f3c526c229e3ef) ) /* only last 16kbyte visible? */
2675   ROM_LOAD( "magicard.01",  0x8000, 0x10000, CRC(c94767d4) SHA1(171ac946bdf2575f9e4a31e534a8e641597af519) ) /* 1st and 2nd half identical */
3265   ROM_REGION( 0x10000, "maincpu", 0 )   /* magicard.004 has extra code, and 2 different NVRAM contents harcoded */
3266   ROM_LOAD( "magicard.004", 0x0000, 0x8000,  CRC(f6e948b8) SHA1(7d5983015a508ab135ccbf69b7f3c526c229e3ef) )
3267   ROM_LOAD( "magicard.01",  0x8000, 0x8000,  CRC(c94767d4) SHA1(171ac946bdf2575f9e4a31e534a8e641597af519) ) /* 1st and 2nd half identical */
3268   ROM_IGNORE(                       0x8000 )   /* Identical halves. Discarding 2nd half */
26763269
26773270   ROM_REGION( 0x10000, "gfx1", 0 )
26783271   ROM_LOAD( "mc2gr2.bin",   0x0000, 0x8000, CRC(733da697) SHA1(45122c64d5a371ec91cecc67b7faf179078e714d) )
26793272   ROM_LOAD( "mc2gr1.bin",   0x8000, 0x8000, CRC(2406b8d2) SHA1(e9d7a25562fd5adee351d7ef6ba02fff6aab021a) )
26803273
26813274   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2682   ROM_LOAD( "magicrd2_nvram.bin", 0x0000, 0x0800, CRC(343b3162) SHA1(1524959dbbc0c6d7c5c3a4a6b20976382cfbe88f) )
3275   ROM_LOAD( "magicrd2_nvram.bin", 0x0000, 0x0800, CRC(343b3162) SHA1(1524959dbbc0c6d7c5c3a4a6b20976382cfbe88f) )
26833276
26843277   ROM_REGION( 0x0200, "proms", 0 )
26853278   ROM_LOAD( "mc2-82s147.bin",   0x0000, 0x0200, CRC(aa91cc35) SHA1(79f9a755441500e618c4183f524f969fffd44100) )
r7640r7641
27323325   ROM_LOAD( "v1.bin", 0x8000, 0x8000, CRC(23e0d1c6) SHA1(98967b14d3264c444a1dfbd15c57cde70f41f09d) )
27333326
27343327   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2735   ROM_LOAD( "vegasslw_nvram.bin", 0x0000, 0x0800, CRC(59b84075) SHA1(964531320d29adc42c3d8f0a28df395354a51d9b) )
3328   ROM_LOAD( "vegasslw_nvram.bin", 0x0000, 0x0800, CRC(1aa043e3) SHA1(c93d071effb2f2fe95e9dc751174c2c765595f74) )
27363329
2737   ROM_REGION( 0x0200, "proms", 0 )
2738   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
3330   ROM_REGION( 0x0200, "proms", 0 )   /* PLD address the 2nd half */
3331   ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
27393332ROM_END
27403333
27413334
r7640r7641
27483341   ROM_LOAD( "v1.bin", 0x8000, 0x8000, CRC(23e0d1c6) SHA1(98967b14d3264c444a1dfbd15c57cde70f41f09d) )
27493342
27503343   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2751   ROM_LOAD( "vegasfst_nvram.bin", 0x0000, 0x0800, CRC(627d13d7) SHA1(03ac605c589c645b672c57b0695dcb90240068e1) )
3344   ROM_LOAD( "vegasfst_nvram.bin", 0x0000, 0x0800, CRC(5034de7a) SHA1(ab2077a49d94676531c73ad8d8ce9548bbfa2b81) )
27523345
2753   ROM_REGION( 0x0200, "proms", 0 )
2754   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
3346   ROM_REGION( 0x0200, "proms", 0 )   /* PLD address the 2nd half */
3347   ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
27553348ROM_END
27563349
27573350
r7640r7641
27643357   ROM_LOAD( "ch1.bin", 0x8000, 0x8000, CRC(0a3679c0) SHA1(ce8a067e1a2eccf9fabb16733ef3a14e0e8129e5) )   /* X & Y in txt layer */
27653358
27663359   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2767   ROM_LOAD( "vegasfte_nvram.bin", 0x0000, 0x0800, CRC(c09e49a2) SHA1(e95f444f1bfda0a2f2af6045f6079e16f13d244d) )
3360   ROM_LOAD( "vegasfte_nvram.bin", 0x0000, 0x0800, CRC(166c6055) SHA1(db2143a2a3adc92578bd3707391d2f5030cc6a6f) )
27683361
3362   ROM_REGION( 0x0200, "proms", 0 )   /* PLD address the 2nd half */
3363   ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
3364ROM_END
3365
3366
3367ROM_START( vegasmil )
3368   ROM_REGION( 0x10000, "maincpu", 0 )   /* Mile */
3369   ROM_LOAD( "mile.bin", 0x8000, 0x8000, CRC(ef7e02e2) SHA1(7432b0e723dc528901c422ab1d7d01fd1bc1eb20) )
3370
3371   ROM_REGION( 0x10000, "gfx1", 0 )
3372   ROM_LOAD( "v2.bin", 0x0000, 0x8000, CRC(af7ab460) SHA1(01ea400424152c09c10eb83a1bd569019969ccb7) )
3373   ROM_LOAD( "v1.bin", 0x8000, 0x8000, CRC(23e0d1c6) SHA1(98967b14d3264c444a1dfbd15c57cde70f41f09d) )
3374
3375   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
3376   ROM_LOAD( "vegasmil_nvram.bin", 0x0000, 0x0800, CRC(d2608e5f) SHA1(ac936df71dbc0bfb811a3ba3c91444a2a3e7b036) )
3377
27693378   ROM_REGION( 0x0200, "proms", 0 )
2770   ROM_LOAD( "82s147.bin",   0x0000, 0x0200, CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
3379   ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
27713380ROM_END
27723381
2773
27743382/*
27753383
27763384  Impera - Jolly Joker
r7640r7641
28623470   ROM_LOAD( "impera1.bin", 0x8000, 0x8000, CRC(c3ab44dd) SHA1(e46c0fd94da561f57033647f1703fa135777ece5) )
28633471
28643472   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2865   ROM_LOAD( "jolyjokr_nvram.bin", 0x0000, 0x0800, CRC(f33e66ed) SHA1(7a4b9a1b2f976d5d26f54915a213d5ac5eca0a42) )
3473   ROM_LOAD( "jolyjokr_nvram.bin", 0x0000, 0x0800, CRC(f33e66ed) SHA1(7a4b9a1b2f976d5d26f54915a213d5ac5eca0a42) )
28663474
28673475   ROM_REGION( 0x0200, "proms", 0 )
28683476   ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
r7640r7641
28783486   ROM_LOAD( "impera1.bin", 0x8000, 0x8000, CRC(c3ab44dd) SHA1(e46c0fd94da561f57033647f1703fa135777ece5) )
28793487
28803488   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2881   ROM_LOAD( "jolyjokra_nvram.bin", 0x0000, 0x0800, CRC(ed43693c) SHA1(d4aa4e539ab12c97bc9b9b1077997195a11d782b) )
3489   ROM_LOAD( "jolyjokra_nvram.bin", 0x0000, 0x0800, CRC(ed43693c) SHA1(d4aa4e539ab12c97bc9b9b1077997195a11d782b) )
28823490
28833491   ROM_REGION( 0x0200, "proms", 0 )
28843492   ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
r7640r7641
28883496/*
28893497    Jolly Joker (40bet, croatian hack)
28903498
2891am27s29_ic40.bin     1ST AND 2ND HALF IDENTICAL
2892ic25.bin             1ST AND 2ND HALF IDENTICAL
2893ic26.bin             1ST AND 2ND HALF IDENTICAL
3499    am27s29_ic40.bin     1ST AND 2ND HALF IDENTICAL
3500    ic25.bin             1ST AND 2ND HALF IDENTICAL
3501    ic26.bin             1ST AND 2ND HALF IDENTICAL
28943502
2895These graphics ROMs have enough data to fix the bitrotten graphics from the other Jolly Joker sets.
2896impera1.bin ---> bits 7 & 6
2897impera2.bin ---> bits 7 & 0
3503    These graphics ROMs have enough data to fix the bitrotten graphics from the other Jolly Joker sets.
3504    impera1.bin ---> bits 7 & 6
3505    impera2.bin ---> bits 7 & 0
28983506
2899Two slightly different programs. One in each half.
2900Both have Min Bet (5), Max Bet (40).
2901Surely selectable through a PLD.
3507    Two slightly different programs. One in each half.
3508    Both have Min Bet (5), Max Bet (40).
3509    Surely selectable through a PLD.
29023510
29033511*/
29043512ROM_START( jolyjokrb )
2905   ROM_REGION( 0x18000, "maincpu", 0 )   /* Two slightly different programs. Using the 1st one...*/
2906   ROM_LOAD( "unbekannt.bin", 0x8000, 0x10000, CRC(327fa3d7) SHA1(2435aada2377b2f8f01d059a7aba9bc7a8993537) )   /* 1st prg */
3513   ROM_REGION( 0x10000, "maincpu", 0 )   /* Two slightly different programs. Using the 1st one...*/
3514   ROM_LOAD( "unbekannt.bin", 0x8000, 0x8000, CRC(327fa3d7) SHA1(2435aada2377b2f8f01d059a7aba9bc7a8993537) )   /* 1st prg */
3515   ROM_IGNORE(                        0x8000 )   /* Using the 1st program. Discarding 2nd half */
29073516//  ROM_LOAD( "unbekannt.bin", 0x0000, 0x10000, CRC(327fa3d7) SHA1(2435aada2377b2f8f01d059a7aba9bc7a8993537) )  /* 2nd prg */
29083517
2909   ROM_REGION( 0x20000, "gfx1", 0 )
2910   ROM_LOAD( "ic25.bin", 0x00000, 0x10000, CRC(1bd067af) SHA1(9436fe085ba63c00a12ea80903470a84535e3dc1) )
2911   ROM_LOAD( "ic26.bin", 0x10000, 0x10000, CRC(3e45dfc6) SHA1(8fd0b0cc00cdd96244ae7e7a91f6613b1c144ee0) )
2912   ROM_COPY( "gfx1",     0x10000, 0x00000, 0x8000 ) /* rgn, srcoffset, offset, length */
3518   ROM_REGION( 0x10000, "gfx1", 0 )
3519   ROM_LOAD( "ic26.bin", 0x0000, 0x8000, CRC(3e45dfc6) SHA1(8fd0b0cc00cdd96244ae7e7a91f6613b1c144ee0) )
3520   ROM_IGNORE(                   0x8000 )   /* Identical halves. Discarding 2nd half */
3521   ROM_LOAD( "ic25.bin", 0x8000, 0x8000, CRC(1bd067af) SHA1(9436fe085ba63c00a12ea80903470a84535e3dc1) )
3522   ROM_IGNORE(                   0x8000 )   /* Identical halves. Discarding 2nd half */
29133523
29143524   ROM_REGION( 0x0800,   "nvram", 0 )   /* default NVRAM */
2915   ROM_LOAD( "jolyjokrb_nvram.bin", 0x0000, 0x0800, CRC(17007bb5) SHA1(72e08096293ce4fbde205a63b5ecd9641dbee017) )
3525   ROM_LOAD( "jolyjokrb_nvram.bin", 0x0000, 0x0800, CRC(17007bb5) SHA1(72e08096293ce4fbde205a63b5ecd9641dbee017) )
29163526
29173527   ROM_REGION( 0x0200, "proms", 0 )
2918   ROM_LOAD( "am27s29_ic40.bin",   0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
3528   ROM_LOAD( "am27s29_ic40.bin",    0x0000, 0x0200, CRC(0b671bba) SHA1(92d512e02b50f98b7bc5a60deee4fee722656c4f) )
29193529ROM_END
29203530
29213531
2922ROM_START( jokercrd )
3532/*
3533    Title:    MULTI WIN
3534    Company:  FUN WORLD
3535    Version:  0167
3536    Date:     1992-11-11
3537
3538    Unknown or encrypted CPU.
3539*/
3540ROM_START( multiwin )
3541   ROM_REGION( 0x10000*2, "maincpu", 0 )  // *2 for decrypted opcodes (see init)
3542   ROM_LOAD( "multiwin3.bin",   0x8000, 0x8000, CRC(995ca34d) SHA1(4d6ec10810ece493447a01af149ad8387d5f3c2f) )   /* just the 2nd half */
3543   ROM_LOAD( "multiwin4.bin",  0x4000, 0x8000, CRC(f062125c) SHA1(93c9aa518810798f3449a28e851eb6433ba7bbf8) )   /* just the 2nd half */
3544
3545   ROM_REGION( 0x10000, "gfx1", 0 )
3546   ROM_LOAD( "multiwin1.bin",   0x0000, 0x8000, CRC(97589aa6) SHA1(2486116637bd906cb3b32acd86fc861c48a0475e) )
3547   ROM_LOAD( "multiwin2.bin",   0x8000, 0x8000, CRC(580b3239) SHA1(362aa85c57ad0bce1d7d15a93b9998daba4d306a) )
3548
3549   ROM_REGION( 0x0200, "proms", 0 )
3550   ROM_LOAD( "multi_prom.bin",   0x0000, 0x0200, BAD_DUMP CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) ) /* using the joker card one */
3551ROM_END
3552
3553
29233554/*  (Multi) Joker Card from Vesely Svet (Sprightly World). Czech poker game.
2924    Program roms seems encrypted. Custom Funworld CPU based on 6502 family.
2925    Seems to be a Big Deal clone.
3555    Program roms seems encrypted. Seems to be a Big Deal clone, running in
3556    Funworld Multi Win hardware.
3557
3558    1x Custom Funworld CPU, based on 6502 family. Silkscreened "Fun World Elektronik".
3559    1x Maxim MAX690CPA - Microprocessor Supervisory IC (DIP 8).
3560
3561    2x MC68B21P PIAs.
3562    1x GM68B45S CRT Controller.
3563
3564    1x AY-3-8910.
3565    1x TDA2003 Audio amplifier.
3566
3567    4x ROM 27C256.
3568    1x RAM GM76C28A.
3569    1x RAM KM6264BL.
3570    1x PROM N82S147AN.
3571
3572    1x PAL 16L8ACN
3573
3574    1x 8 DIP switches bank.
3575    1x Push button (SW2). (reset?)
3576    1x Variable Resistor (VR1).
3577    1x 16 MHz. Crystal.
3578    1x CR2025 (3V) battery.
3579
3580    1x 2x17 pin male connector.
3581    1x 2x22 Edge connector.
3582    1x 2x8  Edge connector.
3583
3584    ------------------------------------------------------------------------
3585
3586    IC41.bin seems from another game. You can see the following strings:
3587
3588    AMATIC TRADING GMBH  AUSTRIA
3589
3590    JEDE  UNERLAUBTEVERAENDERUNG
3591    BZWKOPIE  WIRD  DENZORN DER
3592    GOETTERAUF SICH  ZIEHEN
3593
3594    VERSION A267BC 200/300 KARTE
3595    1993-11-29
3596
3597    ------------------------------------------------------------------------
3598
3599    ic41.bin   1ST AND 2ND HALF IDENTICAL
3600    ic37.bin   1ST AND 2ND HALF IDENTICAL
3601    ic10.bin   BADADDR    xxxxxx-xxxxxxxx
29263602*/
2927   ROM_REGION( 0x18000, "maincpu", 0 )
2928   ROM_LOAD( "ic41.bin",   0x8000,  0x8000, CRC(d36188b3) SHA1(3fb848fabbbde9fbb70875b3dfef62bfb3a8cbcb) ) /* only last 16kbyte visible? */
2929   ROM_LOAD( "ic37.bin",   0x10000, 0x8000, CRC(8e0d70c4) SHA1(018f92631acbe98e5826a41698f0e07b4b46cd71) ) /* 1st and 2nd half identical */
2930   ROM_COPY( "maincpu",   0x10000, 0xc000, 0x4000 ) /* rgn, srcoffset, offset, length */
29313603
3604ROM_START( jokercrd )
3605   ROM_REGION( 0x10000, "maincpu", 0 )
3606   ROM_LOAD( "ic41.bin",   0x8000,  0x4000, CRC(d36188b3) SHA1(3fb848fabbbde9fbb70875b3dfef62bfb3a8cbcb) )
3607   ROM_IGNORE(                      0x4000 )   /* Identical halves. Discarding 2nd half */
3608   ROM_LOAD( "ic37.bin",   0xc000,  0x4000, CRC(8e0d70c4) SHA1(018f92631acbe98e5826a41698f0e07b4b46cd71) )
3609   ROM_IGNORE(                      0x4000 )   /* Identical halves. Discarding 2nd half */
3610
29323611   ROM_REGION( 0x10000, "gfx1", 0 )
2933   ROM_LOAD( "ic10.bin",   0x0000, 0x8000, CRC(2bbd27ad) SHA1(37d37899398d95beac5f3cbffc4277c97aca1a23) )
2934   ROM_LOAD( "ic11.bin",   0x8000, 0x8000, CRC(21d05a57) SHA1(156c18ec31b08e4c4af6f73b49cb5d5c68d1670f) ) /* bad dump?, or sprite plane */
3612   ROM_LOAD( "vesely_zg_1.ic10", 0x0000, 0x8000, CRC(2bbd27ad) SHA1(37d37899398d95beac5f3cbffc4277c97aca1a23) )
3613   ROM_LOAD( "vesely_zg_2.ic11", 0x8000, 0x8000, CRC(21d05a57) SHA1(156c18ec31b08e4c4af6f73b49cb5d5c68d1670f) ) /* bad dump, or sprite plane bug? */
29353614
29363615   ROM_REGION( 0x0200, "proms", 0 )
2937   ROM_LOAD( "ic13.bin",   0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
3616   ROM_LOAD( "ic13.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) )
29383617ROM_END
29393618
29403619
r7640r7641
29633642*/
29643643
29653644ROM_START( mongolnw )
2966   ROM_REGION( 0x20000, "maincpu", 0 )
2967   ROM_LOAD( "prgteov.2.3m.u16", 0x10000, 0x10000, CRC(996b851a) SHA1(ef4e3d036ca10b33c83749024d04c4d4c09feeb7) )
2968   ROM_COPY( "maincpu",   0x18000, 0x8000, 0x8000 )
3645   ROM_REGION( 0x10000, "maincpu", 0 )
3646   ROM_LOAD( "prgteov.2.3m.u16", 0x8000, 0x8000, CRC(996b851a) SHA1(ef4e3d036ca10b33c83749024d04c4d4c09feeb7) )
3647   ROM_IGNORE(                           0x8000 )   /* Identical halves. Discarding 2nd half */
29693648
29703649   ROM_REGION( 0x10000, "cpu1", 0 ) /* TSC87C52-16CB MCU Code */
2971   ROM_LOAD( "tsc87c52-mf.u40", 0x00000, 0x02000 , CRC(ae22e778) SHA1(0897e05967d68d7f23489e98717663e3a3176070) )
3650   ROM_LOAD( "tsc87c52-mf.u40", 0x0000, 0x02000 , CRC(ae22e778) SHA1(0897e05967d68d7f23489e98717663e3a3176070) )
29723651
2973   ROM_REGION( 0x20000, "gfx1", 0 )
2974   ROM_LOAD( "mong.rc.b2.u3", 0x00000, 0x10000, CRC(5e019b73) SHA1(63a544dccb9589e5a6b938e604c09d4d8fc060fc) )
2975   ROM_LOAD( "mong.rc.c1.u2", 0x10000, 0x10000, CRC(e3fc24c4) SHA1(ea4e67ace63b55a76365f7e11a67c7d420a52dd7) )
2976   ROM_COPY( "gfx1",    0x10000, 0x8000, 0x8000 ) /* rgn, srcoffset, offset, length */
3652   ROM_REGION( 0x10000, "gfx1", 0 )
3653   ROM_LOAD( "mong.rc.b2.u3", 0x0000, 0x8000, CRC(5e019b73) SHA1(63a544dccb9589e5a6b938e604c09d4d8fc060fc) )
3654   ROM_IGNORE(                        0x8000 )   /* Identical halves. Discarding 2nd half */
3655   ROM_LOAD( "mong.rc.c1.u2", 0x8000, 0x8000, CRC(e3fc24c4) SHA1(ea4e67ace63b55a76365f7e11a67c7d420a52dd7) )
3656   ROM_IGNORE(                        0x8000 )   /* Identical halves. Discarding 2nd half */
29773657
29783658   ROM_REGION( 0x0200, "proms", 0 )
2979   ROM_LOAD( "am27s29pc_mf.u24",    0x0000, 0x0200, CRC(da9181af) SHA1(1b30d992f3b2a4b3bd81e3f99632311988e2e8d1) )
3659   ROM_LOAD( "am27s29pc_mf.u24", 0x0000, 0x0200, CRC(da9181af) SHA1(1b30d992f3b2a4b3bd81e3f99632311988e2e8d1) )
29803660
29813661   ROM_REGION( 0x0200, "plds", 0 )
2982   ROM_LOAD( "palce16v8h_mf.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
3662   ROM_LOAD( "palce16v8h_mf.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
29833663ROM_END
29843664
29853665
r7640r7641
30063686    - 2x 8 DIP switches
30073687    - 1x 4 DIP switches
30083688    - 1x green led
3689
3690    am27s29pc_sn.u24    1ST AND 2ND HALF IDENTICAL
3691    prgteo2gv2.3.u16    1ST AND 2ND HALF IDENTICAL
3692    soccer1.u2          1ST AND 2ND HALF IDENTICAL
3693    soccer2.u3          1ST AND 2ND HALF IDENTICAL
3694    tsc87c52-sn.u40           1xxxxxxxxxxxx = 0xFF
30093695*/
30103696
30113697ROM_START( soccernw )
3012   ROM_REGION( 0x20000, "maincpu", 0 )
3013   ROM_LOAD( "prgteo2gv2.3.u16", 0x10000, 0x10000, CRC(c61d1937) SHA1(c516f13a108da60b7ccee338b63a025009ef9099) )
3014   ROM_COPY( "maincpu",   0x18000, 0x8000, 0x8000 )
3698   ROM_REGION( 0x10000, "maincpu", 0 )
3699   ROM_LOAD( "prgteo2gv2.3.u16", 0x8000, 0x8000, CRC(c61d1937) SHA1(c516f13a108da60b7ccee338b63a025009ef9099) )
3700   ROM_IGNORE(                           0x8000 )   /* Identical halves. Discarding 2nd half */
30153701
30163702   ROM_REGION( 0x10000, "cpu1", 0 ) /* TSC87C52-16CB MCU Code */
3017   ROM_LOAD( "tsc87c52-sn.u40", 0x00000, 0x02000 , CRC(af0bd35b) SHA1(c6613a7bcdec2fd6060d6dcf639654568de87e75) )
3703   ROM_LOAD( "tsc87c52-sn.u40", 0x0000, 0x02000 , CRC(af0bd35b) SHA1(c6613a7bcdec2fd6060d6dcf639654568de87e75) )
30183704
3019   ROM_REGION( 0x20000, "gfx1", 0 )
3020   ROM_LOAD( "soccer2.u3", 0x00000, 0x10000, CRC(db09b5bb) SHA1(a12bf2938f5482ea5ebc0db6fd6594e1beb97017) )
3021   ROM_LOAD( "soccer1.u2", 0x10000, 0x10000, CRC(564cc467) SHA1(8f90c4bacd97484623666b25dae77e628908e243) )
3022   ROM_COPY( "gfx1",    0x10000, 0x8000, 0x8000 ) /* rgn, srcoffset, offset, length */
3705   ROM_REGION( 0x10000, "gfx1", 0 )
3706   ROM_LOAD( "soccer2.u3", 0x0000, 0x8000, CRC(db09b5bb) SHA1(a12bf2938f5482ea5ebc0db6fd6594e1beb97017) )
3707   ROM_IGNORE(                     0x8000 )   /* Identical halves. Discarding 2nd half */
3708   ROM_LOAD( "soccer1.u2", 0x8000, 0x8000, CRC(564cc467) SHA1(8f90c4bacd97484623666b25dae77e628908e243) )
3709   ROM_IGNORE(                     0x8000 )   /* Identical halves. Discarding 2nd half */
30233710
30243711   ROM_REGION( 0x0200, "proms", 0 )
3025   ROM_LOAD( "am27s29pc_sn.u24",    0x0000, 0x0200, CRC(d02894fc) SHA1(adcdc912cc0b7a7f67b122fa94fca921c957b282) )
3712   ROM_LOAD( "am27s29pc_sn.u24", 0x0000, 0x0200, CRC(d02894fc) SHA1(adcdc912cc0b7a7f67b122fa94fca921c957b282) )
30263713
30273714   ROM_REGION( 0x0200, "plds", 0 )
3028   ROM_LOAD( "palce16v8h_sn.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
3715   ROM_LOAD( "palce16v8h_sn.u5", 0x0000, 0x0117, NO_DUMP ) /* PAL is read protected */
30293716ROM_END
30303717
30313718
r7640r7641
30733760ROM_END
30743761
30753762
3763/**** Fun World Quiz ****
30763764
3765  Fun World Quiz
3766  ?hlinger Ges.m.b.H.
3767
3768  Horizontal Display
3769  Currents
3770  +5V   2A
3771  +12V  0.5A
3772  -5V   -
3773
3774  4 way joystick.
3775  1 action button.
3776
3777
3778                Pinouts
3779  --------------+--+--+--------------
3780            GND |A |01| GND
3781            GND |B |02| GND
3782            GND |C |03| GND
3783            +5V |D |04| +5V
3784           +12V |E |05| +12V
3785                |F |06|
3786                |H |07|
3787            ... |J |08| ... Empty (*)
3788        Credits |K |09| ...
3789            ... |L |10| ...
3790            ... |M |11| 1P Start
3791            ... |N |12| 2P Start
3792    1P Action 1 |P |13| 1P Action 2
3793    2P Action 1 |R |14| 2P Action 2
3794        1P Left |S |15| 1P Right
3795        1P Down |T |16| 1P Up
3796        2P Left |U |17| 2P Right
3797        2P Down |V |18| 2P Up
3798    Video Green |W |19| Video Red
3799     Video Sync |X |20| Video Blue
3800        Speaker |Y |21| Video GND
3801            ... |Z |22| Speaker
3802
3803  Some pinout letters are missing.
3804  This was a decision made by engineers
3805  to avoid mix-ups.
3806
3807  (*) Normally used in System Austria pinout.
3808
3809
3810  DIP Switches (simple on/off)
3811  --+-----------------------------------------------------------------------
3812  1 | Buchhaltung / Bookkeeping.
3813  2 | Nicht verwendet / Not used.
3814  3 | Ohne Zahlen (Wien) / No numbers (Vienna).
3815  4 | Nicht verwendet / Not used.
3816  5 | Nicht verwendet / Not used.
3817  6 | Richtige Antwort wird angezeigt / Right answer is shown.
3818  7 | Frage wird bei Einsatz angezeigt / Question is shown when bet is made.
3819  8 | Spiel mit Einsatzwahl / Game with betting.
3820  --+-----------------------------------------------------------------------
3821
3822*/
3823ROM_START( funquiz )   /* Fun World Quiz */
3824   ROM_REGION( 0x10000, "maincpu", 0 )
3825   ROM_LOAD( "kqu_6.bin", 0xc000, 0x4000, CRC(50f0e586) SHA1(85ce5b95283113e2ac94fd882c57ce1b26135ed0) )
3826
3827   ROM_REGION( 0x10000, "gfx1", 0 )
3828   ROM_FILL(                0x0000, 0x4000, 0xff)
3829   ROM_LOAD( "q_3.bin",     0x4000, 0x4000, CRC(0dafa07a) SHA1(5d6fa842c617f92fad14a597396249d5a4d28c9a) )
3830   ROM_FILL(                0x8000, 0x4000, 0xff)
3831//  ROM_LOAD( "q_2_nec.bin", 0xc000, 0x4000, BAD_DUMP CRC(8e3bfcc7) SHA1(81b35e786fab088a439a4423becf08a78a0b2df0) )
3832
3833   ROM_REGION( 0x10000, "badgfx", 0 ) /* just a temporal container */
3834   ROM_LOAD( "q_2_nec.bin", 0xc000, 0x4000, BAD_DUMP CRC(8e3bfcc7) SHA1(81b35e786fab088a439a4423becf08a78a0b2df0) )
3835
3836   /* One unpopulated questions socket... Maybe sport_1 is missing */
3837   ROM_REGION( 0x100000, "questions", ROMREGION_ERASEFF )
3838
3839   /* 01 - Allgemein */
3840   ROM_LOAD( "allg_1.bin",  0x00000, 0x8000, CRC(1351cf56) SHA1(50e89c3e6d256bcf7f1d3c0dbef935e4e8561096) )
3841   ROM_LOAD( "allg_2.bin",    0x08000, 0x8000, CRC(021492a4) SHA1(b59e1303f17c9e5af05a808118ae729205690bb2) )
3842   ROM_LOAD( "allg_3.bin",    0x10000, 0x8000, CRC(de8e055f) SHA1(593fce143ee5994087bbac8b51ac7e2d02e8701c) )
3843   ROM_LOAD( "allg_4.bin",  0x18000, 0x8000, CRC(5c87177a) SHA1(a8a8318165008cb3295e25d4b4d38146f44a32fc) ) // this one has the category in the rom in ALL caps, is it official?
3844   ROM_LOAD( "allg_5.bin",  0x20000, 0x8000, CRC(83056686) SHA1(00f14ded371751d54a391bf583d940b32ddeae58) )
3845
3846   /* 02 - Geschichte */
3847   ROM_LOAD( "gesch_1.bin", 0x28000, 0x8000, CRC(6f785938) SHA1(1e3df7c262d8cb7d7981c9d424d4c1361fe55b50) )
3848   ROM_LOAD( "gesch_2.bin", 0x30000, 0x8000, CRC(3363c0ba) SHA1(f1a2a86e6abc73dd9312fa744b6929fae138e219) )
3849
3850   /* 03 - Geographie */
3851   ROM_LOAD( "geo_1.bin",   0x38000, 0x8000, CRC(504da831) SHA1(4bef7bed4d300400c094cb30e9af55d3c6f47c29) )
3852   ROM_LOAD( "geo_2.bin",   0x40000, 0x8000, CRC(7c563119) SHA1(9f3ae3ba3e4f60d9ea4b5c95aa5aaada8bb446a3) )
3853
3854   /* 04 - Technik */
3855   ROM_LOAD( "tech_1.bin",  0x48000, 0x8000, CRC(cf5b9edc) SHA1(f1085c9915d21c4da581d06c9568d2bb47d467ed) )
3856
3857   /* 05 - Sport */
3858   ROM_LOAD( "sport_2.bin", 0x50000, 0x8000, CRC(7accde63) SHA1(75ec3a02368d3a07d48ef9a9ff4ca7f8cf7798e2) )
3859
3860   /* 07 - Pop */
3861   ROM_LOAD( "pop_1.bin",   0x58000, 0x8000, CRC(5c74781e) SHA1(0a50a706fd397bb220e31f1a7adaa4204b242888) )
3862   ROM_LOAD( "pop_2.bin",   0x60000, 0x8000, CRC(10103648) SHA1(6fdc1aa4dcc8919e46def1c19adc2b9686c0f72d) )
3863
3864   ROM_REGION( 0x0200, "proms", 0 )
3865   ROM_LOAD( "82s147.bin",    0x0000, 0x0200, BAD_DUMP CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) )
3866ROM_END
3867
3868
3869
30773870/**************************
30783871*  Driver Initialization  *
30793872**************************/
r7640r7641
32804073
32814074}
32824075
4076static DRIVER_INIT( multiwin )
4077/*****************************************************
32834078
4079  This only decrypt the text strings.
4080  Need more work to get the opcodes properly decrypted
4081
4082******************************************************/
4083{
4084   UINT8 *ROM = memory_region(machine, "maincpu");
4085   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
4086
4087   int x;
4088
4089   for (x=0x8000; x < 0x10000; x++)
4090   {
4091      ROM[x] = ROM[x] ^ 0x91;
4092      UINT8 code;
4093
4094      ROM[x] = BITSWAP8(ROM[x],5,6,7,2,3,0,1,4);
4095
4096      code = ROM[x];
4097
4098      /* decrypt code here */
4099
4100      ROM[x+0x10000] = code;
4101   }
4102
4103   memory_set_decrypted_region(space, 0x8000, 0xffff, memory_region(machine, "maincpu") + 0x18000);
4104}
4105
4106static DRIVER_INIT( royalcdc )
4107{
4108/*****************************************************
4109
4110  This only decrypt the text strings.
4111  The opcode encryption seems to be conditional, and
4112  bits of the XOR (and bitswap?) can be turned on and
4113  off, possibly depending on the address
4114
4115******************************************************/
4116
4117   UINT8 *ROM = memory_region(machine, "maincpu");
4118   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
4119
4120   int x;
4121
4122   for (x=0x8000; x < 0x10000; x++)
4123   {
4124      ROM[x] = ROM[x] ^ 0x22;
4125      UINT8 code;
4126
4127      // this seems correct for the data, plaintext decrypts fine
4128      ROM[x] = BITSWAP8(ROM[x],2,6,7,4,3,1,5,0);
4129
4130      // the code uses different encryption, there are conflicts here
4131      // so it's probably address based
4132      code = ROM[x];
4133      if      (code==0x12) code = 0x10; // ^0x02
4134      else if (code==0x1a) code = 0x18; // ^0x02
4135      else if (code==0x20) code = 0xa2; // ^0x82
4136      else if (code==0x26) code = 0xa2; // ^0x84
4137      else if (code==0x39) code = 0xbd; // ^0x84
4138      else if (code==0x5a) code = 0x58; // ^0x02
4139      else if (code==0x5c) code = 0xd8; // ^0x84
4140      else if (code==0x84) code = 0xa2; // ^0x26
4141      else if (code==0x8f) code = 0xa9; // ^0x26
4142      else if (code==0xaf) code = 0xa9; // ^0x06
4143      else if (code==0xa2) code = 0x80; // ^0x22
4144      else if (code==0xa3) code = 0x85; // ^0x26
4145      else if (code==0xa8) code = 0x8e; // ^0x26
4146      else if (code==0xa9) code = 0x8d; // ^0x24
4147      else if (code==0xbb) code = 0xbd; // ^0x06
4148      else if (code==0xc8) code = 0xca; // ^0x02
4149      else if (code==0xc6) code = 0xe0; // ^0x26
4150      else if (code==0xce) code = 0xe8; // ^0x26
4151      else if (code==0xf4) code = 0xd0; // ^0x24
4152
4153      ROM[x+0x10000] = code;
4154   }
4155
4156   memory_set_decrypted_region(space, 0x6000, 0xffff, memory_region(machine, "maincpu") + 0x16000);
4157}
4158
4159
32844160/*************************
32854161*      Game Drivers      *
32864162*************************/
32874163
3288/*    YEAR  NAME       PARENT    MACHINE   INPUT      INIT      ROT    COMPANY            FULLNAME                                          FLAGS  */
3289GAME( 1985, jollycrd,  0,        funworld, funworld,  0,        ROT0, "TAB-Austria",     "Jolly Card (austrian)",                           0 )
3290GAME( 1985, jolyc3x3,  jollycrd, funworld, funworld,  0,        ROT0, "TAB-Austria",     "Jolly Card (3x3 deal)",                           0 )
3291GAME( 2000, jolyc980,  jollycrd, cuoreuno, jolyc980,  0,        ROT0, "Spale-Soft",      "Jolly Card Professional 2.0",                     0 )
3292GAME( 1998, jolycdev,  jollycrd, funworld, funworld,  0,        ROT0, "TAB/Evona",       "Jolly Card (Evona Electronic)",                   0 )
3293GAME( 1985, jolyccra,  jollycrd, cuoreuno, jolycdcr,  0,        ROT0, "TAB-Austria",     "Jolly Card (croatian, set 1)",                    0 )
3294GAME( 1993, jolyccrb,  jollycrd, cuoreuno, jolycdcr,  0,        ROT0, "Soft Design",     "Jolly Card (croatian, set 2)",                    0 )
3295GAME( 199?, jolycdit,  jollycrd, cuoreuno, jolycdit,  tabblue,  ROT0, "bootleg",         "Jolly Card (italian, blue TAB board, encrypted)", 0 )
3296GAME( 1990, jolycdib,  jollycrd, cuoreuno, jolycdib,  tabblue,  ROT0, "bootleg",         "Jolly Card (italian, encrypted bootleg)",         0 )   /* not a real TAB blue PCB */
3297GAME( 1985, sjcd2kx3,  jollycrd, funworld, funworld,  0,        ROT0, "M.P.",            "Super Joly 2000 - 3x",                            0 )
3298GAME( 1986, jolycdab,  jollycrd, funworld, funworld,  0,        ROT0, "Inter Games",     "Jolly Card (austrian, Funworld, bootleg)",        GAME_NOT_WORKING )
3299GAME( 1986, bigdeal,   0,        funworld, bigdeal,   0,        ROT0, "Funworld",        "Big Deal (hungarian, set 1)",                     GAME_IMPERFECT_COLORS )
3300GAME( 1986, bigdealb,  bigdeal,  funworld, bigdeal,   0,        ROT0, "Funworld",        "Big Deal (hungarian, set 2)",                     GAME_IMPERFECT_COLORS )
3301GAME( 1986, jolycdat,  bigdeal,  funworld, bigdeal,   0,        ROT0, "Funworld",        "Jolly Card (austrian, Funworld)",                 GAME_IMPERFECT_COLORS )
3302GAME( 1996, cuoreuno,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Cuore 1 (italian)",                               0 )
3303GAME( 1997, elephfam,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Elephant Family (italian, new)",                  0 )
3304GAME( 1996, elephfmb,  elephfam, cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Elephant Family (italian, old)",                  0 )
3305GAME( 1996, pool10,    0,        cuoreuno, pool10,    0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 1)",                        0 )
3306GAME( 1996, pool10b,   pool10,   cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 2)",                        0 )
3307GAME( 1996, pool10c,   pool10,   cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 3)",                        0 )
3308GAME( 1997, pool10d,   pool10,   cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 4)",                        0 )
3309GAME( 1997, tortufam,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Tortuga Family (italian)",                        0 )
3310GAME( 1996, potgame,   0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pot Game (italian)",                              0 )
3311GAME( 1996, bottle10,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Bottle 10 (italian, set 1)",                      0 )
3312GAME( 1996, bottl10b,  bottle10, cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Bottle 10 (italian, set 2)",                      0 )
3313GAME( 1991, royalcrd,  0,        royalcrd, royalcrd,  0,        ROT0, "TAB-Austria",     "Royal Card (austrian, set 1)",                    0 )
3314GAME( 1991, royalcdb,  royalcrd, royalcrd, royalcrd,  0,        ROT0, "TAB-Austria",     "Royal Card (austrian, set 2)",                    0 )
3315GAME( 1991, royalcdc,  royalcrd, royalcrd, royalcrd,  0,        ROT0, "Evona Electronic","Royal Card (slovak, encrypted)",                  GAME_WRONG_COLORS | GAME_NOT_WORKING )
3316GAME( 1993, royalcdp,  royalcrd, cuoreuno, royalcrd,  0,        ROT0, "Digital Dreams",  "Royal Card v2.0 Professional",                    GAME_NOT_WORKING )
3317GAME( 1991, lluck3x3,  royalcrd, cuoreuno, royalcrd,  0,        ROT0, "TAB-Austria",     "Lucky Lady (3x3 deal)",                           0 )
3318GAME( 1991, lluck4x1,  royalcrd, royalcrd, royalcrd,  0,        ROT0, "TAB-Austria",     "Lucky Lady (4x1 aces)",                           0 )
3319GAME( 1996, magicrd2,  0,        magicrd2, magicrd2,  0,        ROT0, "Impera",          "Magic Card II (bulgarian)",                       GAME_IMPERFECT_SOUND )
3320GAME( 1996, magicd2a,  magicrd2, magicrd2, magicrd2,  magicd2a, ROT0, "Impera",          "Magic Card II (green TAB or Impera board)",       GAME_NOT_WORKING )
3321GAME( 1996, magicd2b,  magicrd2, magicrd2, magicrd2,  magicd2b, ROT0, "Impera",          "Magic Card II (blue TAB board, encrypted)",       GAME_NOT_WORKING )
3322GAME( 1993, vegasslw,  0,        funworld, funworld,  0,        ROT0, "Funworld",        "Royal Vegas Joker Card (slow deal)",              0 )
3323GAME( 1993, vegasfst,  vegasslw, funworld, funworld,  0,        ROT0, "Soft Design",     "Royal Vegas Joker Card (fast deal)",              0 )
3324GAME( 1993, vegasfte,  vegasslw, funworld, funworld,  0,        ROT0, "Soft Design",     "Royal Vegas Joker Card (fast deal, english gfx)", 0 )
3325GAME( 198?, jolyjokr,  0,        funworld, funworld,  0,        ROT0, "Impera",          "Jolly Joker (98bet, set 1)",                      0 )
3326GAME( 198?, jolyjokra, jolyjokr, funworld, jolyjokra, 0,        ROT0, "Impera",          "Jolly Joker (98bet, set 2)",                      0 )
3327GAME( 198?, jolyjokrb, jolyjokr, funworld, funworld,  0,        ROT0, "Impera",          "Jolly Joker (40bet, croatian hack)",              0 )
3328GAME( 1993, jokercrd,  0,        funworld, funworld,  0,        ROT0, "Vesely Svet",     "Joker Card (Ver.A267BC, encrypted)",              GAME_WRONG_COLORS | GAME_NOT_WORKING )
3329GAME( 199?, mongolnw,  0,        royalmcu, royalcrd,  0,        ROT0, "bootleg",         "Mongolfier New (italian)",                        GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
3330GAME( 199?, soccernw,  0,        royalcrd, royalcrd,  soccernw, ROT0, "bootleg",         "Soccer New (italian)",                            GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
3331GAME( 198?, saloon,    0,        saloon,   saloon,    saloon,   ROT0, "<unknown>",       "Saloon (french, encrypted)",                      GAME_NO_SOUND | GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
4164/*     YEAR  NAME       PARENT    MACHINE   INPUT      INIT      ROT    COMPANY            FULLNAME                                          FLAGS                  LAYOUT */
4165GAMEL( 1985, jollycrd,  0,        fw1stpal, funworld,  0,        ROT0, "TAB-Austria",     "Jolly Card (austrian)",                           0,                     layout_jollycrd )
4166GAMEL( 1985, jolyc3x3,  jollycrd, fw1stpal, funworld,  0,        ROT0, "TAB-Austria",     "Jolly Card (3x3 deal)",                           0,                     layout_jollycrd )
4167GAMEL( 1993, jolycmzs,  jollycrd, cuoreuno, jolyc980,  0,        ROT0, "MZS Tech",        "Jolly Card Professional 2.0 (MZS Tech)",          0,                     layout_jollycrd )
4168GAMEL( 2000, jolyc980,  jollycrd, cuoreuno, jolyc980,  0,        ROT0, "Spale-Soft",      "Jolly Card Professional 2.0 (Spale Soft)",        0,                     layout_jollycrd )
4169GAMEL( 1998, jolycdev,  jollycrd, fw1stpal, funworld,  0,        ROT0, "TAB/Evona",       "Jolly Card (Evona Electronic)",                   0,                     layout_jollycrd )
4170GAMEL( 1985, jolyccra,  jollycrd, cuoreuno, jolycdcr,  0,        ROT0, "TAB-Austria",     "Jolly Card (croatian, set 1)",                    0,                     layout_jollycrd )
4171GAMEL( 1993, jolyccrb,  jollycrd, cuoreuno, jolycdcr,  0,        ROT0, "Soft Design",     "Jolly Card (croatian, set 2)",                    0,                     layout_jollycrd )
4172GAMEL( 199?, jolycdit,  jollycrd, cuoreuno, jolycdit,  tabblue,  ROT0, "bootleg",         "Jolly Card (italian, blue TAB board, encrypted)", 0,                     layout_royalcrd )
4173GAMEL( 1990, jolycdib,  jollycrd, cuoreuno, jolycdib,  tabblue,  ROT0, "bootleg",         "Jolly Card (italian, encrypted bootleg)",         0,                     layout_jollycrd )   /* not a real TAB blue PCB */
4174GAMEL( 1985, sjcd2kx3,  jollycrd, fw1stpal, funworld,  0,        ROT0, "M.P.",            "Super Joly 2000 - 3x",                            0,                     layout_jollycrd )
4175GAME(  1986, jolycdab,  jollycrd, fw1stpal, funworld,  0,        ROT0, "Inter Games",     "Jolly Card (austrian, Funworld, bootleg)",        GAME_NOT_WORKING )
4176GAMEL( 1986, bigdeal,   0,        fw2ndpal, bigdeal,   0,        ROT0, "Funworld",        "Big Deal (hungarian, set 1)",                     GAME_IMPERFECT_COLORS, layout_bigdeal  )
4177GAMEL( 1986, bigdealb,  bigdeal,  fw2ndpal, bigdeal,   0,        ROT0, "Funworld",        "Big Deal (hungarian, set 2)",                     GAME_IMPERFECT_COLORS, layout_bigdeal  )
4178GAMEL( 1986, jolycdat,  bigdeal,  fw2ndpal, bigdeal,   0,        ROT0, "Funworld",        "Jolly Card (austrian, Funworld)",                 GAME_IMPERFECT_COLORS, layout_bigdeal  )
4179GAMEL( 1996, cuoreuno,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Cuore 1 (italian)",                               0,                     layout_jollycrd )
4180GAMEL( 1997, elephfam,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Elephant Family (italian, new)",                  0,                     layout_jollycrd )
4181GAMEL( 1996, elephfmb,  elephfam, cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Elephant Family (italian, old)",                  0,                     layout_jollycrd )
4182GAMEL( 1996, pool10,    0,        cuoreuno, pool10,    0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 1)",                        0,                     layout_jollycrd )
4183GAMEL( 1996, pool10b,   pool10,   cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 2)",                        0,                     layout_jollycrd )
4184GAMEL( 1996, pool10c,   pool10,   cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 3)",                        0,                     layout_jollycrd )
4185GAMEL( 1997, pool10d,   pool10,   cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pool 10 (italian, set 4)",                        0,                     layout_jollycrd )
4186GAMEL( 1997, tortufam,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Tortuga Family (italian)",                        0,                     layout_jollycrd )
4187GAMEL( 1996, potgame,   0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Pot Game (italian)",                              0,                     layout_jollycrd )
4188GAMEL( 1996, bottle10,  0,        cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Bottle 10 (italian, set 1)",                      0,                     layout_jollycrd )
4189GAMEL( 1996, bottl10b,  bottle10, cuoreuno, cuoreuno,  0,        ROT0, "C.M.C.",          "Bottle 10 (italian, set 2)",                      0,                     layout_jollycrd )
4190GAMEL( 1991, royalcrd,  0,        royalcrd, royalcrd,  0,        ROT0, "TAB-Austria",     "Royal Card (austrian, set 1)",                    0,                     layout_royalcrd )
4191GAMEL( 1991, royalcdb,  royalcrd, royalcrd, royalcrd,  0,        ROT0, "TAB-Austria",     "Royal Card (austrian, set 2)",                    0,                     layout_jollycrd )
4192GAME(  1991, royalcdc,  royalcrd, royalcrd, royalcrd,  royalcdc, ROT0, "Evona Electronic","Royal Card (slovak, encrypted)",                  GAME_WRONG_COLORS | GAME_NOT_WORKING )
4193GAME(  1993, royalcdp,  royalcrd, cuoreuno, royalcrd,  0,        ROT0, "Digital Dreams",  "Royal Card v2.0 Professional",                    GAME_NOT_WORKING )
4194GAMEL( 1991, lluck3x3,  royalcrd, cuoreuno, royalcrd,  0,        ROT0, "TAB-Austria",     "Lucky Lady (3x3 deal)",                           0,                     layout_jollycrd )
4195GAMEL( 1991, lluck4x1,  royalcrd, royalcrd, royalcrd,  0,        ROT0, "TAB-Austria",     "Lucky Lady (4x1 aces)",                           0,                     layout_jollycrd )
4196GAMEL( 1996, magicrd2,  0,        magicrd2, magicrd2,  0,        ROT0, "Impera",          "Magic Card II (bulgarian)",                       GAME_IMPERFECT_SOUND,  layout_jollycrd )
4197GAME(  1996, magicd2a,  magicrd2, magicrd2, magicrd2,  magicd2a, ROT0, "Impera",          "Magic Card II (green TAB or Impera board)",       GAME_NOT_WORKING )
4198GAME(  1996, magicd2b,  magicrd2, magicrd2, magicrd2,  magicd2b, ROT0, "Impera",          "Magic Card II (blue TAB board, encrypted)",       GAME_NOT_WORKING )
4199GAMEL( 1993, vegasslw,  0,        fw2ndpal, vegasslw,  0,        ROT0, "Funworld",        "Royal Vegas Joker Card (slow deal)",              0,                     layout_jollycrd )
4200GAMEL( 1993, vegasfst,  vegasslw, fw2ndpal, vegasfst,  0,        ROT0, "Soft Design",     "Royal Vegas Joker Card (fast deal)",              0,                     layout_jollycrd )
4201GAMEL( 1993, vegasfte,  vegasslw, fw2ndpal, vegasfte,  0,        ROT0, "Soft Design",     "Royal Vegas Joker Card (fast deal, english gfx)", 0,                     layout_jollycrd )
4202GAMEL( 1993, vegasmil,  vegasslw, fw2ndpal, vegasmil,  0,        ROT0, "Mile",            "Royal Vegas Joker Card (fast deal, Mile)",        0,                     layout_jollycrd )
4203GAMEL( 198?, jolyjokr,  0,        fw1stpal, funworld,  0,        ROT0, "Impera",          "Jolly Joker (98bet, set 1)",                      0,                     layout_jollycrd )
4204GAMEL( 198?, jolyjokra, jolyjokr, fw1stpal, jolyjokra, 0,        ROT0, "Impera",          "Jolly Joker (98bet, set 2)",                      0,                     layout_jollycrd )
4205GAMEL( 198?, jolyjokrb, jolyjokr, fw1stpal, funworld,  0,        ROT0, "Impera",          "Jolly Joker (40bet, croatian hack)",              0,                     layout_jollycrd )
4206GAME(  1992, multiwin,  0,        fw1stpal, funworld,  multiwin, ROT0, "Funworld",        "Multi Win (Ver.0167, encrypted)",                 GAME_WRONG_COLORS | GAME_NOT_WORKING )
4207GAME(  1993, jokercrd,  0,        fw2ndpal, funworld,  0,        ROT0, "Vesely Svet",     "Joker Card (Ver.A267BC, encrypted)",              GAME_WRONG_COLORS | GAME_NOT_WORKING )
4208GAME(  199?, mongolnw,  0,        royalcrd, royalcrd,  0,        ROT0, "bootleg",         "Mongolfier New (italian)",                        GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
4209GAME(  199?, soccernw,  0,        royalcrd, royalcrd,  soccernw, ROT0, "bootleg",         "Soccer New (italian)",                            GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
4210GAME(  198?, saloon,    0,        saloon,   saloon,    saloon,   ROT0, "<unknown>",       "Saloon (french, encrypted)",                      GAME_NO_SOUND | GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
4211GAME(  198?, funquiz,   0,        funquiz,  funquiz,   0,        ROT0, "Funworld",        "Fun World Quiz (austrian)",                       GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS )
33324212
src/mame/drivers/konamigx.c
r7640r7641
10451045            }
10461046            else if(last_prot_op == 0x57a)   // winspike
10471047            {
1048               /* player 1 input buffer protection */
10481049               memory_write_dword(space, 0xc10f00, memory_read_dword(space, 0xc00f10));
10491050               memory_write_dword(space, 0xc10f04, memory_read_dword(space, 0xc00f14));
1051               /* player 2 input buffer protection */
1052               memory_write_dword(space, 0xc10f20, memory_read_dword(space, 0xc00f20));
1053               memory_write_dword(space, 0xc10f24, memory_read_dword(space, 0xc00f24));
1054               /* ... */
10501055               memory_write_dword(space, 0xc0fe00, memory_read_dword(space, 0xc00f30));
10511056               memory_write_dword(space, 0xc0fe04, memory_read_dword(space, 0xc00f34));
10521057            }
src/mame/drivers/cave.c
r7640r7641
1616
1717
1818-----------------------------------------------------------------------------------------
19Year + Game         License       PCB         Tilemaps        Sprites         Other
19Year + Game           License       PCB         Tilemaps        Sprites         Other
2020-----------------------------------------------------------------------------------------
2194  Mazinger Z      Banpresto     ?           038 9335EX706   013 9341E7009   Z80
2294  PowerInstinct 2 Atlus         ATG02?      038 9429WX709   013             Z80 NMK 112
2395  P.I. Legends    Atlus         AT047G2-B   038 9429WX709   013 9341E7009   Z80 NMK 112
2495  Metamoqester    Banpresto     BP947A      038 9437WX711   013 9346E7002   Z80
2595  Sailor Moon     Banpresto     BP945A      038 9437WX711   013 9346E7002   Z80
2695  Donpachi        Atlus         AT-C01DP-2  038 9429WX727   013 8647-01     NMK 112
2796  Air Gallet      Banpresto     BP962A      038 9437WX711   013 9346E7002   Z80
2896  Hotdog Storm    Marble        ASTC9501    038 9341EX702                   Z80
2997  Dodonpachi      Atlus         ATC03D2     ?
3098  Dangun Feveron  Nihon System  CV01        038 9808WX003   013 9807EX004
3198  ESP Ra.De.      Atlus         ATC04       ?
3298  Uo Poko         Jaleco        CV02        038 9749WX001   013 9749EX004
3399  Guwange         Atlus         ATC05       ?
3499  Gaia Crusaders  Noise Factory ?           038 9838WX003   013 9918EX008
3599  Koro Koro Quest Takumi        TUG-01B     038 9838WX004   013 9838EX004
3601  Thunder Heroes  Primetek      ?           038 9838WX003   013 9918EX008
2194 Mazinger Z         Banpresto     ?           038 9335EX706   013 9341E7009   Z80
2294 PowerInstinct 2    Atlus         ATG02?      038 9429WX709   013             Z80 NMK 112
2395 P.I. Legends       Atlus         AT047G2-B   038 9429WX709   013 9341E7009   Z80 NMK 112
2495 Metamoqester       Banpresto     BP947A      038 9437WX711   013 9346E7002   Z80
2595 Sailor Moon        Banpresto     BP945A      038 9437WX711   013 9346E7002   Z80
2695 Donpachi           Atlus         AT-C01DP-2  038 9429WX727   013 8647-01     NMK 112
2796 Air Gallet         Banpresto     BP962A      038 9437WX711   013 9346E7002   Z80
2896 Hotdog Storm       Marble        ASTC9501    038 9341EX702                   Z80
2997 Dodonpachi         Atlus         ATC03D2     ?
3098 Dangun Feveron     Nihon System  CV01        038 9808WX003   013 9807EX004
3198 ESP Ra.De.         Atlus         ATC04       ?
3298 Uo Poko            Jaleco        CV02        038 9749WX001   013 9749EX004
3399 Guwange            Atlus         ATC05       ?
3499 Gaia Crusaders     Noise Factory ?           038 9838WX003   013 9918EX008
3599 Koro Koro Quest    Takumi        TUG-01B     038 9838WX004   013 9838EX004
3699 Crusher Makochan   Takumi        TUG-01B     ""              ""
3799 Tobikose! Jumpman  Namco         TJ0476      038 9919WX007   013 9934WX002
3801 Thunder Heroes     Primetek      ?           038 9838WX003   013 9918EX008
3739-----------------------------------------------------------------------------------------
3840
3941To Do:
r7640r7641
418420***************************************************************************/
419421
420422static ADDRESS_MAP_START( dfeveron_map, ADDRESS_SPACE_PROGRAM, 16 )
421   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                             // ROM
422   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                             // RAM
423   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)         // YMZ280
424/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
423   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                                   // ROM
424   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
425   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)               // YMZ280
426/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
425427/**/AM_RANGE(0x408000, 0x40ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
426/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
427/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
428/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
429/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
428430/**/AM_RANGE(0x708000, 0x708fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
429/**/AM_RANGE(0x710000, 0x710bff) AM_READONLY                                    // ?
430   AM_RANGE(0x710c00, 0x710fff) AM_RAM                                             // ?
431   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
431/**/AM_RANGE(0x710000, 0x710bff) AM_READONLY                                             // ?
432   AM_RANGE(0x710c00, 0x710fff) AM_RAM                                                   // ?
433   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
432434   AM_RANGE(0x800000, 0x80007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
433/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
434/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
435   AM_RANGE(0xb00000, 0xb00001) AM_READ_PORT("IN0")                                 // Inputs
436   AM_RANGE(0xb00002, 0xb00003) AM_READ_PORT("IN1")                                 // Inputs + EEPROM
437   AM_RANGE(0xc00000, 0xc00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                  // EEPROM
435/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
436/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
437   AM_RANGE(0xb00000, 0xb00001) AM_READ_PORT("IN0")                                       // Inputs
438   AM_RANGE(0xb00002, 0xb00003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
439   AM_RANGE(0xc00000, 0xc00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                        // EEPROM
438440ADDRESS_MAP_END
439441
440442
r7640r7641
443445***************************************************************************/
444446
445447static ADDRESS_MAP_START( ddonpach_map, ADDRESS_SPACE_PROGRAM, 16 )
446   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                             // ROM
447   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                             // RAM
448   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)         // YMZ280
449/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
448   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                                   // ROM
449   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
450   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)               // YMZ280
451/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
450452/**/AM_RANGE(0x408000, 0x40ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
451/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
452/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
453/**/AM_RANGE(0x700000, 0x70ffff) AM_RAM_WRITE(cave_vram_2_8x8_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
454   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
453/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
454/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
455/**/AM_RANGE(0x700000, 0x70ffff) AM_RAM_WRITE(cave_vram_2_8x8_w) AM_BASE_MEMBER(cave_state, vram_2)      // Layer 2
456   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
455457   AM_RANGE(0x800000, 0x80007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
456/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
457/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
458/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                           // Layer 2 Control
458/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
459/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
460/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                        // Layer 2 Control
459461/**/AM_RANGE(0xc00000, 0xc0ffff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
460   AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("IN0")                        // Inputs
461   AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("IN1")                        // Inputs + EEPROM
462   AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                  // EEPROM
462   AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("IN0")                                       // Inputs
463   AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
464   AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                        // EEPROM
463465ADDRESS_MAP_END
464466
465467
r7640r7641
494496#endif
495497
496498static ADDRESS_MAP_START( donpachi_map, ADDRESS_SPACE_PROGRAM, 16 )
497   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                   // ROM
498   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
499   AM_RANGE(0x200000, 0x207fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)                  // Layer 1
500   AM_RANGE(0x300000, 0x307fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)                  // Layer 0
501   AM_RANGE(0x400000, 0x407fff) AM_RAM_WRITE(cave_vram_2_8x8_w) AM_BASE_MEMBER(cave_state, vram_2)               // Layer 2
502   AM_RANGE(0x500000, 0x507fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)                           // Sprites
503   AM_RANGE(0x508000, 0x50ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                           // Sprites?
504/**/AM_RANGE(0x600000, 0x600005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                                 // Layer 1 Control
505/**/AM_RANGE(0x700000, 0x700005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                                 // Layer 0 Control
506/**/AM_RANGE(0x800000, 0x800005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                                 // Layer 2 Control
507   AM_RANGE(0x900000, 0x90007f) AM_RAM_READ(donpachi_videoregs_r) AM_BASE_MEMBER(cave_state, videoregs)            // Video Regs
499   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                      // ROM
500   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                      // RAM
501   AM_RANGE(0x200000, 0x207fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
502   AM_RANGE(0x300000, 0x307fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
503   AM_RANGE(0x400000, 0x407fff) AM_RAM_WRITE(cave_vram_2_8x8_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
504   AM_RANGE(0x500000, 0x507fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
505   AM_RANGE(0x508000, 0x50ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                        // Sprites?
506/**/AM_RANGE(0x600000, 0x600005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
507/**/AM_RANGE(0x700000, 0x700005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
508/**/AM_RANGE(0x800000, 0x800005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                           // Layer 2 Control
509   AM_RANGE(0x900000, 0x90007f) AM_RAM_READ(donpachi_videoregs_r) AM_BASE_MEMBER(cave_state, videoregs)   // Video Regs
508510/**/AM_RANGE(0xa08000, 0xa08fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)      // Palette
509   AM_RANGE(0xb00000, 0xb00003) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff)            // M6295
510   AM_RANGE(0xb00010, 0xb00013) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x00ff)            //
511   AM_RANGE(0xb00020, 0xb0002f) AM_DEVWRITE("nmk112", nmk112_okibank_lsb_w)                                 //
512   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0")                                       // Inputs
513   AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
514   AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                        // EEPROM
511   AM_RANGE(0xb00000, 0xb00003) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff)               // M6295
512   AM_RANGE(0xb00010, 0xb00013) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x00ff)               //
513   AM_RANGE(0xb00020, 0xb0002f) AM_DEVWRITE("nmk112", nmk112_okibank_lsb_w)                        //
514   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0")                                          // Inputs
515   AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1")                                          // Inputs + EEPROM
516   AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                           // EEPROM
515517ADDRESS_MAP_END
516518
517519
r7640r7641
520522***************************************************************************/
521523
522524static ADDRESS_MAP_START( esprade_map, ADDRESS_SPACE_PROGRAM, 16 )
523   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                             // ROM
524   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                             // RAM
525   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)         // YMZ280
526/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
525   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                                   // ROM
526   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
527   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)               // YMZ280
528/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
527529/**/AM_RANGE(0x408000, 0x40ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
528/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
529/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
530/**/AM_RANGE(0x700000, 0x707fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)            // Layer 2
531   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
530/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
531/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
532/**/AM_RANGE(0x700000, 0x707fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
533   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
532534   AM_RANGE(0x800000, 0x80007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
533/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
534/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
535/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                           // Layer 2 Control
535/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
536/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
537/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                        // Layer 2 Control
536538/**/AM_RANGE(0xc00000, 0xc0ffff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
537   AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("IN0"            )   // Inputs
538   AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("IN1"            )   // Inputs + EEPROM
539   AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                  // EEPROM
539   AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("IN0" )                                       // Inputs
540   AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("IN1" )                                       // Inputs + EEPROM
541   AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                        // EEPROM
540542ADDRESS_MAP_END
541543
542544
r7640r7641
545547***************************************************************************/
546548
547549static ADDRESS_MAP_START( gaia_map, ADDRESS_SPACE_PROGRAM, 16 )
548   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                             // ROM
549   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                             // RAM
550   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)         // YMZ280
551   AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprite bank 1
550   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                                   // ROM
551   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
552   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)               // YMZ280
553   AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprite bank 1
552554   AM_RANGE(0x408000, 0x40ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprite bank 2
553   AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
554   AM_RANGE(0x508000, 0x50ffff) AM_RAM                                             // More Layer 0, Tested but not used?
555   AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
556   AM_RANGE(0x608000, 0x60ffff) AM_RAM                                             // More Layer 1, Tested but not used?
557   AM_RANGE(0x700000, 0x707fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)            // Layer 2
558   AM_RANGE(0x708000, 0x70ffff) AM_RAM                                             // More Layer 2, Tested but not used?
559   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
555   AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
556   AM_RANGE(0x508000, 0x50ffff) AM_RAM                                                   // More Layer 0, Tested but not used?
557   AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
558   AM_RANGE(0x608000, 0x60ffff) AM_RAM                                                   // More Layer 1, Tested but not used?
559   AM_RANGE(0x700000, 0x707fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
560   AM_RANGE(0x708000, 0x70ffff) AM_RAM                                                   // More Layer 2, Tested but not used?
561   AM_RANGE(0x800000, 0x800007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
560562   AM_RANGE(0x800000, 0x80007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
561/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
562/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
563/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                           // Layer 2 Control
563/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
564/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
565/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                        // Layer 2 Control
564566   AM_RANGE(0xc00000, 0xc0ffff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
565   AM_RANGE(0xd00010, 0xd00011) AM_READ_PORT("IN0")                                 // Inputs
566   AM_RANGE(0xd00010, 0xd00011) AM_WRITE(gaia_coin_lsb_w)                              // Coin counter only
567   AM_RANGE(0xd00012, 0xd00013) AM_READ_PORT("IN1")                                 // Inputs
568   AM_RANGE(0xd00014, 0xd00015) AM_READ_PORT("DSW")                                 // Dips
569   AM_RANGE(0xd00014, 0xd00015) AM_WRITE(watchdog_reset16_w)                           // Watchdog?
567   AM_RANGE(0xd00010, 0xd00011) AM_READ_PORT("IN0")                                       // Inputs
568   AM_RANGE(0xd00010, 0xd00011) AM_WRITE(gaia_coin_lsb_w)                                    // Coin counter only
569   AM_RANGE(0xd00012, 0xd00013) AM_READ_PORT("IN1")                                       // Inputs
570   AM_RANGE(0xd00014, 0xd00015) AM_READ_PORT("DSW")                                       // Dips
571   AM_RANGE(0xd00014, 0xd00015) AM_WRITE(watchdog_reset16_w)                                 // Watchdog?
570572ADDRESS_MAP_END
571573
572574
r7640r7641
575577***************************************************************************/
576578
577579static ADDRESS_MAP_START( guwange_map, ADDRESS_SPACE_PROGRAM, 16 )
578   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                             // ROM
579   AM_RANGE(0x200000, 0x20ffff) AM_RAM                                             // RAM
580   AM_RANGE(0x300000, 0x300007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
580   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                                   // ROM
581   AM_RANGE(0x200000, 0x20ffff) AM_RAM                                                   // RAM
582   AM_RANGE(0x300000, 0x300007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
581583   AM_RANGE(0x300000, 0x30007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
582/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
584/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
583585/**/AM_RANGE(0x408000, 0x40ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
584/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
585/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
586/**/AM_RANGE(0x700000, 0x707fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)            // Layer 2
587   AM_RANGE(0x800000, 0x800003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)         // YMZ280
588/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
589/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
590/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                           // Layer 2 Control
586/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
587/**/AM_RANGE(0x600000, 0x607fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
588/**/AM_RANGE(0x700000, 0x707fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
589   AM_RANGE(0x800000, 0x800003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)               // YMZ280
590/**/AM_RANGE(0x900000, 0x900005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
591/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
592/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                        // Layer 2 Control
591593/**/AM_RANGE(0xc00000, 0xc0ffff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
592   AM_RANGE(0xd00010, 0xd00011) AM_READ_PORT("IN0")                                 // Inputs
593   AM_RANGE(0xd00010, 0xd00011) AM_DEVWRITE("eeprom", cave_eeprom_lsb_w)                  // EEPROM
594   AM_RANGE(0xd00012, 0xd00013) AM_READ_PORT("IN1")                                 // Inputs + EEPROM
595//  AM_RANGE(0xd00012, 0xd00013) AM_WRITENOP                                              // ?
596//  AM_RANGE(0xd00014, 0xd00015) AM_WRITENOP                                              // ? $800068 in dfeveron ? probably Watchdog
594   AM_RANGE(0xd00010, 0xd00011) AM_READ_PORT("IN0")                                       // Inputs
595   AM_RANGE(0xd00010, 0xd00011) AM_DEVWRITE("eeprom", cave_eeprom_lsb_w)                        // EEPROM
596   AM_RANGE(0xd00012, 0xd00013) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
597//  AM_RANGE(0xd00012, 0xd00013) AM_WRITENOP                                                            // ?
598//  AM_RANGE(0xd00014, 0xd00015) AM_WRITENOP                                                            // ? $800068 in dfeveron ? probably Watchdog
597599ADDRESS_MAP_END
598600
599601
r7640r7641
602604***************************************************************************/
603605
604606static ADDRESS_MAP_START( hotdogst_map, ADDRESS_SPACE_PROGRAM, 16 )
605   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                             // ROM
606   AM_RANGE(0x300000, 0x30ffff) AM_RAM                                             // RAM
607   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                                   // ROM
608   AM_RANGE(0x300000, 0x30ffff) AM_RAM                                                   // RAM
607609/**/AM_RANGE(0x408000, 0x408fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
608/**/AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
609/**/AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
610/**/AM_RANGE(0x980000, 0x987fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)            // Layer 2
611   AM_RANGE(0xa80000, 0xa80007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
612//  AM_RANGE(0xa8006e, 0xa8006f) AM_READ(soundlatch_ack_r)                                      // From Sound CPU
613   AM_RANGE(0xa8006e, 0xa8006f) AM_WRITE(sound_cmd_w)                                 // To Sound CPU
610/**/AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
611/**/AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
612/**/AM_RANGE(0x980000, 0x987fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
613   AM_RANGE(0xa80000, 0xa80007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
614//  AM_RANGE(0xa8006e, 0xa8006f) AM_READ(soundlatch_ack_r)                                              // From Sound CPU
615   AM_RANGE(0xa8006e, 0xa8006f) AM_WRITE(sound_cmd_w)                                       // To Sound CPU
614616   AM_RANGE(0xa80000, 0xa8007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
615/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
616/**/AM_RANGE(0xb80000, 0xb80005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
617/**/AM_RANGE(0xc00000, 0xc00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                           // Layer 2 Control
618   AM_RANGE(0xc80000, 0xc80001) AM_READ_PORT("IN0")                                 // Inputs
619   AM_RANGE(0xc80002, 0xc80003) AM_READ_PORT("IN1")                                 // Inputs + EEPROM
620   AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", hotdogst_eeprom_msb_w)               // EEPROM
621   AM_RANGE(0xd00002, 0xd00003) AM_WRITENOP                                 // ???
622/**/AM_RANGE(0xf00000, 0xf07fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
617/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
618/**/AM_RANGE(0xb80000, 0xb80005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
619/**/AM_RANGE(0xc00000, 0xc00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                        // Layer 2 Control
620   AM_RANGE(0xc80000, 0xc80001) AM_READ_PORT("IN0")                                       // Inputs
621   AM_RANGE(0xc80002, 0xc80003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
622   AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", hotdogst_eeprom_msb_w)                     // EEPROM
623   AM_RANGE(0xd00002, 0xd00003) AM_WRITENOP                                             // ???
624/**/AM_RANGE(0xf00000, 0xf07fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
623625/**/AM_RANGE(0xf08000, 0xf0ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
624626ADDRESS_MAP_END
625627
r7640r7641
692694   return state->hopper ? 1 : 0;
693695}
694696
697
695698static ADDRESS_MAP_START( korokoro_map, ADDRESS_SPACE_PROGRAM, 16 )
696699   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                      // ROM
697//  AM_RANGE(0x100000, 0x107fff) AM_READONLY                                                           // Layer 0
698   AM_RANGE(0x100000, 0x107fff) AM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)                        // Layer 0
699//  AM_RANGE(0x140000, 0x140005) AM_READONLY                                                           // Layer 0 Control
700   AM_RANGE(0x140000, 0x140005) AM_WRITEONLY AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
701//  AM_RANGE(0x180000, 0x187fff) AM_READONLY                                                           // Sprites
702   AM_RANGE(0x180000, 0x187fff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
700   AM_RANGE(0x100000, 0x107fff) AM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)               // Layer 0
701   AM_RANGE(0x140000, 0x140005) AM_WRITEONLY AM_BASE_MEMBER(cave_state, vctrl_0)                     // Layer 0 Control
702   AM_RANGE(0x180000, 0x187fff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)   // Sprites
703703   AM_RANGE(0x1c0000, 0x1c0007) AM_READ(cave_irq_cause_r)                                       // IRQ Cause
704   AM_RANGE(0x1c0000, 0x1c007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                           // Video Regs
705//  AM_RANGE(0x200000, 0x207fff) AM_READONLY                                                           // Palette
704   AM_RANGE(0x1c0000, 0x1c007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                     // Video Regs
706705   AM_RANGE(0x200000, 0x207fff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
707706//  AM_RANGE(0x240000, 0x240003) AM_DEVREAD8( "ymz", ymz280b_r, 0x00ff)                                     // YMZ280
708707   AM_RANGE(0x240000, 0x240003) AM_DEVWRITE8( "ymz", ymz280b_w, 0x00ff)                           // YMZ280
709708   AM_RANGE(0x280000, 0x280001) AM_READ_PORT("IN0")                                          // Inputs + ???
710709   AM_RANGE(0x280002, 0x280003) AM_READ_PORT("IN1")                                          // Inputs + EEPROM
711   AM_RANGE(0x280008, 0x280009) AM_WRITE(korokoro_leds_w)
710   AM_RANGE(0x280008, 0x280009) AM_WRITE(korokoro_leds_w)                                       // Leds
712711   AM_RANGE(0x28000a, 0x28000b) AM_DEVWRITE("eeprom", korokoro_eeprom_msb_w)                        // EEPROM
713   AM_RANGE(0x28000c, 0x28000d) AM_WRITENOP                                             // 0 (watchdog?)
712   AM_RANGE(0x28000c, 0x28000d) AM_WRITENOP                                                // 0 (watchdog?)
714713   AM_RANGE(0x300000, 0x30ffff) AM_RAM                                                      // RAM
715714ADDRESS_MAP_END
716715
716static ADDRESS_MAP_START( crusherm_map, ADDRESS_SPACE_PROGRAM, 16 )
717   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                      // ROM
718   AM_RANGE(0x100000, 0x107fff) AM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)               // Layer 0
719   AM_RANGE(0x140000, 0x140005) AM_WRITEONLY AM_BASE_MEMBER(cave_state, vctrl_0)                     // Layer 0 Control
720   AM_RANGE(0x180000, 0x187fff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)   // Sprites
721   AM_RANGE(0x200000, 0x207fff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
722   AM_RANGE(0x240000, 0x240003) AM_DEVWRITE8( "ymz", ymz280b_w, 0x00ff)                           // YMZ280
723   AM_RANGE(0x280000, 0x280001) AM_READ_PORT("IN0")                                          // Inputs + ???
724   AM_RANGE(0x280002, 0x280003) AM_READ_PORT("IN1")                                          // Inputs + EEPROM
725   AM_RANGE(0x280008, 0x280009) AM_WRITE(korokoro_leds_w)                                       // Leds
726   AM_RANGE(0x28000a, 0x28000b) AM_DEVWRITE("eeprom", korokoro_eeprom_msb_w)                        // EEPROM
727   AM_RANGE(0x28000c, 0x28000d) AM_WRITENOP                                                // 0 (watchdog?)
728   AM_RANGE(0x300000, 0x300007) AM_READ(cave_irq_cause_r)                                       // IRQ Cause
729   AM_RANGE(0x300000, 0x30007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                     // Video Regs
730   AM_RANGE(0x340000, 0x34ffff) AM_RAM                                                      // RAM
731ADDRESS_MAP_END
717732
718733/***************************************************************************
719734                                Mazinger Z
720735***************************************************************************/
721736
722737static ADDRESS_MAP_START( mazinger_map, ADDRESS_SPACE_PROGRAM, 16 )
723   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                             // ROM
724   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                             // RAM
725/**/AM_RANGE(0x200000, 0x207fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
738   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                   // ROM
739   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
740/**/AM_RANGE(0x200000, 0x207fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
726741/**/AM_RANGE(0x208000, 0x20ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
727   AM_RANGE(0x300000, 0x300007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
728   AM_RANGE(0x300068, 0x300069) AM_WRITE(watchdog_reset16_w)                           // Watchdog
729   AM_RANGE(0x30006e, 0x30006f) AM_READWRITE(soundlatch_ack_r, sound_cmd_w)               // From Sound CPU
742   AM_RANGE(0x300000, 0x300007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
743   AM_RANGE(0x300068, 0x300069) AM_WRITE(watchdog_reset16_w)                                 // Watchdog
744   AM_RANGE(0x30006e, 0x30006f) AM_READWRITE(soundlatch_ack_r, sound_cmd_w)                     // From Sound CPU
730745   AM_RANGE(0x300000, 0x30007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
731   AM_RANGE(0x400000, 0x407fff) AM_RAM_WRITE(cave_vram_1_8x8_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
732/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_8x8_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
733/**/AM_RANGE(0x600000, 0x600005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
734/**/AM_RANGE(0x700000, 0x700005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
735   AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN0")                                 // Inputs
736   AM_RANGE(0x800002, 0x800003) AM_READ_PORT("IN1")                                 // Inputs + EEPROM
737   AM_RANGE(0x900000, 0x900001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                  // EEPROM
746   AM_RANGE(0x400000, 0x407fff) AM_RAM_WRITE(cave_vram_1_8x8_w) AM_BASE_MEMBER(cave_state, vram_1)      // Layer 1
747/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_8x8_w) AM_BASE_MEMBER(cave_state, vram_0)      // Layer 0
748/**/AM_RANGE(0x600000, 0x600005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
749/**/AM_RANGE(0x700000, 0x700005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
750   AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN0")                                       // Inputs
751   AM_RANGE(0x800002, 0x800003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
752   AM_RANGE(0x900000, 0x900001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                        // EEPROM
738753/**/AM_RANGE(0xc08000, 0xc0ffff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
739754   AM_RANGE(0xd00000, 0xd7ffff) AM_ROMBANK("bank1")                                       // ROM
740755ADDRESS_MAP_END
r7640r7641
745760***************************************************************************/
746761
747762static ADDRESS_MAP_START( metmqstr_map, ADDRESS_SPACE_PROGRAM, 16 )
748   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                             // ROM
749   AM_RANGE(0x100000, 0x17ffff) AM_ROM                                             // ROM
750   AM_RANGE(0x200000, 0x27ffff) AM_ROM                                             // ROM
763   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                   // ROM
764   AM_RANGE(0x100000, 0x17ffff) AM_ROM                                                   // ROM
765   AM_RANGE(0x200000, 0x27ffff) AM_ROM                                                   // ROM
751766   AM_RANGE(0x408000, 0x408fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
752   AM_RANGE(0x600000, 0x600001) AM_READ(watchdog_reset16_r)   // Watchdog?
753   AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)            // Layer 2
754   AM_RANGE(0x888000, 0x88ffff) AM_RAM                                             //
755   AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
756   AM_RANGE(0x908000, 0x90ffff) AM_RAM                                             //
757   AM_RANGE(0x980000, 0x987fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
758   AM_RANGE(0x988000, 0x98ffff) AM_RAM                                             //
759   AM_RANGE(0xa80000, 0xa80007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
760   AM_RANGE(0xa80068, 0xa80069) AM_WRITE(watchdog_reset16_w)                           // Watchdog?
761   AM_RANGE(0xa8006c, 0xa8006d) AM_READ(soundflags_ack_r) AM_WRITENOP                  // Communication
762   AM_RANGE(0xa8006e, 0xa8006f) AM_READWRITE(soundlatch_ack_r, sound_cmd_w)               // From Sound CPU
767   AM_RANGE(0x600000, 0x600001) AM_READ(watchdog_reset16_r)                                 // Watchdog?
768   AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
769   AM_RANGE(0x888000, 0x88ffff) AM_RAM                                                   //
770   AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
771   AM_RANGE(0x908000, 0x90ffff) AM_RAM                                                   //
772   AM_RANGE(0x980000, 0x987fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
773   AM_RANGE(0x988000, 0x98ffff) AM_RAM                                                   //
774   AM_RANGE(0xa80000, 0xa80007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
775   AM_RANGE(0xa80068, 0xa80069) AM_WRITE(watchdog_reset16_w)                                 // Watchdog?
776   AM_RANGE(0xa8006c, 0xa8006d) AM_READ(soundflags_ack_r) AM_WRITENOP                           // Communication
777   AM_RANGE(0xa8006e, 0xa8006f) AM_READWRITE(soundlatch_ack_r, sound_cmd_w)                     // From Sound CPU
763778   AM_RANGE(0xa80000, 0xa8007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
764/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                           // Layer 2 Control
765/**/AM_RANGE(0xb80000, 0xb80005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                           // Layer 1 Control
766/**/AM_RANGE(0xc00000, 0xc00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
767   AM_RANGE(0xc80000, 0xc80001) AM_READ_PORT("IN0")                                 // Inputs
768   AM_RANGE(0xc80002, 0xc80003) AM_READ_PORT("IN1")                                 // Inputs + EEPROM
769   AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", metmqstr_eeprom_msb_w)               // EEPROM
770   AM_RANGE(0xf00000, 0xf07fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
779/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                        // Layer 2 Control
780/**/AM_RANGE(0xb80000, 0xb80005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
781/**/AM_RANGE(0xc00000, 0xc00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
782   AM_RANGE(0xc80000, 0xc80001) AM_READ_PORT("IN0")                                       // Inputs
783   AM_RANGE(0xc80002, 0xc80003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
784   AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", metmqstr_eeprom_msb_w)                     // EEPROM
785   AM_RANGE(0xf00000, 0xf07fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
771786   AM_RANGE(0xf08000, 0xf0ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // RAM
772787ADDRESS_MAP_END
773788
r7640r7641
802817static WRITE16_HANDLER( pwrinst2_vctrl_3_w )   { cave_state *state = (cave_state *)space->machine->driver_data; vctrl_w(state->vctrl_3, offset, data, mem_mask); }
803818
804819static ADDRESS_MAP_START( pwrinst2_map, ADDRESS_SPACE_PROGRAM, 16 )
805   AM_RANGE(0x000000, 0x1fffff) AM_ROM                                                   // ROM
806   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                                   // RAM
807   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN0")                                       // Inputs
808   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("IN1")                                       //
809   AM_RANGE(0x600000, 0x6fffff) AM_ROM AM_REGION("user1", 0)                                 // extra data ROM space
810   AM_RANGE(0x700000, 0x700001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                        // EEPROM
811   AM_RANGE(0x800000, 0x807fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)                  // Layer 2
812   AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)                  // Layer 0
813   AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)                  // Layer 1
814   AM_RANGE(0x980000, 0x987fff) AM_RAM_WRITE(cave_vram_3_8x8_w) AM_BASE_MEMBER(cave_state, vram_3)               // Layer 3
815   AM_RANGE(0xa00000, 0xa07fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)                           // Sprites
816   AM_RANGE(0xa08000, 0xa0ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                           // Sprites?
817   AM_RANGE(0xa10000, 0xa1ffff) AM_RAM                                                   // Sprites?
818   AM_RANGE(0xa80000, 0xa8007f) AM_RAM_READ(donpachi_videoregs_r) AM_BASE_MEMBER(cave_state, videoregs)            // Video Regs
819/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM_WRITE(pwrinst2_vctrl_2_w) AM_BASE_MEMBER(cave_state, vctrl_2)            // Layer 2 Control
820/**/AM_RANGE(0xb80000, 0xb80005) AM_RAM_WRITE(pwrinst2_vctrl_0_w) AM_BASE_MEMBER(cave_state, vctrl_0)            // Layer 0 Control
821/**/AM_RANGE(0xc00000, 0xc00005) AM_RAM_WRITE(pwrinst2_vctrl_1_w) AM_BASE_MEMBER(cave_state, vctrl_1)            // Layer 1 Control
822/**/AM_RANGE(0xc80000, 0xc80005) AM_RAM_WRITE(pwrinst2_vctrl_3_w) AM_BASE_MEMBER(cave_state, vctrl_3)            // Layer 3 Control
823   AM_RANGE(0xd80000, 0xd80001) AM_READ(soundlatch_ack_r)                                    // ? From Sound CPU
824   AM_RANGE(0xe00000, 0xe00001) AM_WRITE(sound_cmd_w)                                       // To Sound CPU
825   AM_RANGE(0xe80000, 0xe80001) AM_DEVREAD("eeprom", pwrinst2_eeprom_r)                        // EEPROM
826   AM_RANGE(0xf00000, 0xf04fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)         // Palette
820   AM_RANGE(0x000000, 0x1fffff) AM_ROM                                                      // ROM
821   AM_RANGE(0x400000, 0x40ffff) AM_RAM                                                      // RAM
822   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN0")                                          // Inputs
823   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("IN1")                                          //
824   AM_RANGE(0x600000, 0x6fffff) AM_ROM AM_REGION("user1", 0)                                    // extra data ROM space
825   AM_RANGE(0x700000, 0x700001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                           // EEPROM
826   AM_RANGE(0x800000, 0x807fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)            // Layer 2
827   AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
828   AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)            // Layer 1
829   AM_RANGE(0x980000, 0x987fff) AM_RAM_WRITE(cave_vram_3_8x8_w) AM_BASE_MEMBER(cave_state, vram_3)         // Layer 3
830   AM_RANGE(0xa00000, 0xa07fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
831   AM_RANGE(0xa08000, 0xa0ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                        // Sprites?
832   AM_RANGE(0xa10000, 0xa1ffff) AM_RAM                                                      // Sprites?
833   AM_RANGE(0xa80000, 0xa8007f) AM_RAM_READ(donpachi_videoregs_r) AM_BASE_MEMBER(cave_state, videoregs)   // Video Regs
834/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM_WRITE(pwrinst2_vctrl_2_w) AM_BASE_MEMBER(cave_state, vctrl_2)      // Layer 2 Control
835/**/AM_RANGE(0xb80000, 0xb80005) AM_RAM_WRITE(pwrinst2_vctrl_0_w) AM_BASE_MEMBER(cave_state, vctrl_0)      // Layer 0 Control
836/**/AM_RANGE(0xc00000, 0xc00005) AM_RAM_WRITE(pwrinst2_vctrl_1_w) AM_BASE_MEMBER(cave_state, vctrl_1)      // Layer 1 Control
837/**/AM_RANGE(0xc80000, 0xc80005) AM_RAM_WRITE(pwrinst2_vctrl_3_w) AM_BASE_MEMBER(cave_state, vctrl_3)      // Layer 3 Control
838   AM_RANGE(0xd80000, 0xd80001) AM_READ(soundlatch_ack_r)                                       // ? From Sound CPU
839   AM_RANGE(0xe00000, 0xe00001) AM_WRITE(sound_cmd_w)                                          // To Sound CPU
840   AM_RANGE(0xe80000, 0xe80001) AM_DEVREAD("eeprom", pwrinst2_eeprom_r)                           // EEPROM
841   AM_RANGE(0xf00000, 0xf04fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)      // Palette
827842ADDRESS_MAP_END
828843
829844
r7640r7641
837852   return input_port_read(space->machine, "IN0");
838853}
839854
840static READ16_HANDLER( agallet_irq_cause_r )
841{
842   UINT16 irq_cause = cave_irq_cause_r(space, offset, mem_mask);
843
844   if (offset == 0)
845   {
846// Speed hack for agallet
847      if ((cpu_get_pc(space->cpu) == 0xcdca) && (irq_cause & 4))
848         cpu_spinuntil_int(space->cpu);
849   }
850
851   return irq_cause;
852}
853
854855static ADDRESS_MAP_START( sailormn_map, ADDRESS_SPACE_PROGRAM, 16 )
855856   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                   // ROM
856857   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
857858   AM_RANGE(0x110000, 0x110001) AM_RAM                                                   // (agallet)
858859   AM_RANGE(0x200000, 0x3fffff) AM_ROM                                                   // ROM
859860   AM_RANGE(0x400000, 0x407fff) AM_RAM                                                   // (agallet)
860   AM_RANGE(0x408000, 0x40bfff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)         // Palette
861   AM_RANGE(0x408000, 0x40bfff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
861862   AM_RANGE(0x40c000, 0x40ffff) AM_RAM                                                   // (agallet)
862863   AM_RANGE(0x410000, 0x410001) AM_RAM                                                   // (agallet)
863   AM_RANGE(0x500000, 0x507fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)               // Sprites
864   AM_RANGE(0x508000, 0x50ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                           // Sprites?
864   AM_RANGE(0x500000, 0x507fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
865   AM_RANGE(0x508000, 0x50ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
865866   AM_RANGE(0x510000, 0x510001) AM_RAM                                                   // (agallet)
866867   AM_RANGE(0x600000, 0x600001) AM_READ(sailormn_input0_r)                                    // Inputs + Watchdog!
867868   AM_RANGE(0x600002, 0x600003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
868869   AM_RANGE(0x700000, 0x700001) AM_DEVWRITE("eeprom", sailormn_eeprom_msb_w)                     // EEPROM
869   AM_RANGE(0x800000, 0x807fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)                  // Layer 0
870   AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)                  // Layer 1
871   AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)                  // Layer 2
870   AM_RANGE(0x800000, 0x807fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
871   AM_RANGE(0x880000, 0x887fff) AM_RAM_WRITE(cave_vram_1_w) AM_BASE_MEMBER(cave_state, vram_1)         // Layer 1
872   AM_RANGE(0x900000, 0x907fff) AM_RAM_WRITE(cave_vram_2_w) AM_BASE_MEMBER(cave_state, vram_2)         // Layer 2
872873   AM_RANGE(0x908000, 0x908001) AM_RAM                                                   // (agallet)
873/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                                 // Layer 0 Control
874/**/AM_RANGE(0xa80000, 0xa80005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                                 // Layer 1 Control
875/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                                 // Layer 2 Control
874/**/AM_RANGE(0xa00000, 0xa00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
875/**/AM_RANGE(0xa80000, 0xa80005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_1)                        // Layer 1 Control
876/**/AM_RANGE(0xb00000, 0xb00005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_2)                        // Layer 2 Control
876877   AM_RANGE(0xb80000, 0xb80007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause (bit 2 tested!)
877878   AM_RANGE(0xb8006c, 0xb8006d) AM_READ(soundflags_ack_r)                                    // Communication
878879   AM_RANGE(0xb8006e, 0xb8006f) AM_READ(soundlatch_ack_r)                                    // From Sound CPU
879880   AM_RANGE(0xb8006e, 0xb8006f) AM_WRITE(sound_cmd_w)                                       // To Sound CPU
880   AM_RANGE(0xb80000, 0xb8007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                        // Video Regs
881   AM_RANGE(0xb80000, 0xb8007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
881882ADDRESS_MAP_END
882883
883884
884885/***************************************************************************
886                            Tobikose! Jumpman
887***************************************************************************/
888
889static WRITE16_DEVICE_HANDLER( tjumpman_eeprom_lsb_w )
890{
891   if (data & ~0x0038)
892      logerror("%s: Unknown EEPROM bit written %04X\n",cpuexec_describe_context(device->machine),data);
893
894   if (ACCESSING_BITS_0_7)  // odd address
895   {
896      // latch the bit
897      eeprom_write_bit(device, data & 0x0020);
898
899      // reset line asserted: reset.
900      eeprom_set_cs_line(device, (data & 0x0008) ? CLEAR_LINE : ASSERT_LINE);
901
902      // clock line asserted: write latch or select next bit to read
903      eeprom_set_clock_line(device, (data & 0x0010) ? ASSERT_LINE : CLEAR_LINE);
904   }
905}
906
907static WRITE16_HANDLER( tjumpman_leds_w )
908{
909   cave_state *state = (cave_state *)space->machine->driver_data;
910   if (ACCESSING_BITS_0_7)
911   {
912      set_led_status(space->machine, 0,   data & 0x0001);   // suru
913      set_led_status(space->machine, 1,   data & 0x0002);   // shinai
914      set_led_status(space->machine, 2,   data & 0x0004);   // payout
915      set_led_status(space->machine, 3,   data & 0x0008);   // go
916      set_led_status(space->machine, 4,   data & 0x0010);   // 1 bet
917      set_led_status(space->machine, 5,   data & 0x0020);   // medal
918      state->hopper   =               data & 0x0040;   // hopper
919      set_led_status(space->machine, 6,   data & 0x0080);   // 3 bet
920   }
921
922//  popmessage("led %04X", data);
923}
924
925static CUSTOM_INPUT( tjumpman_hopper_r )
926{
927   cave_state *state = (cave_state *)field->port->machine->driver_data;
928   return (state->hopper && !(video_screen_get_frame_number(field->port->machine->primary_screen) % 10)) ? 0 : 1;
929}
930
931static ADDRESS_MAP_START( tjumpman_map, ADDRESS_SPACE_PROGRAM, 16 )
932   AM_RANGE(0x000000, 0x07ffff) AM_ROM                                                   // ROM
933   AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_BASE_SIZE_GENERIC( nvram )                           // RAM
934   AM_RANGE(0x200000, 0x207fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
935   AM_RANGE(0x208000, 0x20ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprite bank 2
936   AM_RANGE(0x304000, 0x307fff) AM_WRITE(cave_vram_0_w)                                    // Layer 0 - 16x16 tiles mapped here
937   AM_RANGE(0x300000, 0x307fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
938   AM_RANGE(0x400000, 0x400005) AM_WRITEONLY AM_BASE_MEMBER(cave_state, vctrl_0)                  // Layer 0 Control
939   AM_RANGE(0x500000, 0x50ffff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
940   AM_RANGE(0x600000, 0x600001) AM_READ_PORT("IN0")                                       // Inputs + EEPROM + Hopper
941   AM_RANGE(0x600002, 0x600003) AM_READ_PORT("IN1")                                       // Inputs
942   AM_RANGE(0x700000, 0x700007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
943   AM_RANGE(0x700068, 0x700069) AM_WRITE(watchdog_reset16_w)                                 // Watchdog
944   AM_RANGE(0x700000, 0x70007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
945   AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff)            // M6295
946   AM_RANGE(0xc00000, 0xc00001) AM_WRITE(tjumpman_leds_w)                                    // Leds + Hopper
947   AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE("eeprom", tjumpman_eeprom_lsb_w)                     // EEPROM
948ADDRESS_MAP_END
949
950
951/***************************************************************************
885952                                    Uo Poko
886953***************************************************************************/
887954
888955static ADDRESS_MAP_START( uopoko_map, ADDRESS_SPACE_PROGRAM, 16 )
889   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                             // ROM
890   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                             // RAM
891   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)         // YMZ280
892/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)         // Sprites
956   AM_RANGE(0x000000, 0x0fffff) AM_ROM                                                   // ROM
957   AM_RANGE(0x100000, 0x10ffff) AM_RAM                                                   // RAM
958   AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymz", ymz280b_r, ymz280b_w, 0x00ff)               // YMZ280
959/**/AM_RANGE(0x400000, 0x407fff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, spriteram, spriteram_size)      // Sprites
893960/**/AM_RANGE(0x408000, 0x40ffff) AM_RAM AM_BASE_MEMBER(cave_state, spriteram_2)                     // Sprites?
894/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)            // Layer 0
895   AM_RANGE(0x600000, 0x600007) AM_READ(cave_irq_cause_r)                              // IRQ Cause
961/**/AM_RANGE(0x500000, 0x507fff) AM_RAM_WRITE(cave_vram_0_w) AM_BASE_MEMBER(cave_state, vram_0)         // Layer 0
962   AM_RANGE(0x600000, 0x600007) AM_READ(cave_irq_cause_r)                                    // IRQ Cause
896963   AM_RANGE(0x600000, 0x60007f) AM_WRITEONLY AM_BASE_MEMBER(cave_state, videoregs)                  // Video Regs
897/**/AM_RANGE(0x700000, 0x700005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                           // Layer 0 Control
964/**/AM_RANGE(0x700000, 0x700005) AM_RAM AM_BASE_MEMBER(cave_state, vctrl_0)                        // Layer 0 Control
898965/**/AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE_SIZE_MEMBER(cave_state, paletteram, paletteram_size)   // Palette
899   AM_RANGE(0x900000, 0x900001) AM_READ_PORT("IN0")                                 // Inputs
900   AM_RANGE(0x900002, 0x900003) AM_READ_PORT("IN1")                                 // Inputs + EEPROM
901   AM_RANGE(0xa00000, 0xa00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                  // EEPROM
966   AM_RANGE(0x900000, 0x900001) AM_READ_PORT("IN0")                                       // Inputs
967   AM_RANGE(0x900002, 0x900003) AM_READ_PORT("IN1")                                       // Inputs + EEPROM
968   AM_RANGE(0xa00000, 0xa00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w)                        // EEPROM
902969ADDRESS_MAP_END
903970
904971
r7640r7641
9331000}
9341001
9351002static ADDRESS_MAP_START( hotdogst_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
936   AM_RANGE(0x0000, 0x3fff) AM_ROM                        // ROM
937   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank2")                  // ROM (Banked)
938   AM_RANGE(0xe000, 0xffff) AM_RAM                        // RAM
1003   AM_RANGE(0x0000, 0x3fff) AM_ROM               // ROM
1004   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank2")   // ROM (Banked)
1005   AM_RANGE(0xe000, 0xffff) AM_RAM               // RAM
9391006ADDRESS_MAP_END
9401007
9411008static ADDRESS_MAP_START( hotdogst_sound_portmap, ADDRESS_SPACE_IO, 8 )
r7640r7641
9431010   AM_RANGE(0x00, 0x00) AM_WRITE(hotdogst_rombank_w)               // ROM bank
9441011   AM_RANGE(0x30, 0x30) AM_READ(soundlatch_lo_r)                  // From Main CPU
9451012   AM_RANGE(0x40, 0x40) AM_READ(soundlatch_hi_r)                  //
946   AM_RANGE(0x50, 0x51) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)      //
1013   AM_RANGE(0x50, 0x51) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)   //
9471014   AM_RANGE(0x60, 0x60) AM_DEVREADWRITE("oki", okim6295_r, okim6295_w)   // M6295
9481015   AM_RANGE(0x70, 0x70) AM_WRITE(hotdogst_okibank_w)               // Samples bank
9491016ADDRESS_MAP_END
r7640r7641
9621029}
9631030
9641031static ADDRESS_MAP_START( mazinger_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
965   AM_RANGE(0x0000, 0x3fff) AM_ROM                        // ROM
966   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank2")                  // ROM (Banked)
967   AM_RANGE(0xc000, 0xc7ff) AM_RAM                        // RAM
968   AM_RANGE(0xf800, 0xffff) AM_RAM                        // RAM
1032   AM_RANGE(0x0000, 0x3fff) AM_ROM               // ROM
1033   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank2")   // ROM (Banked)
1034   AM_RANGE(0xc000, 0xc7ff) AM_RAM               // RAM
1035   AM_RANGE(0xf800, 0xffff) AM_RAM               // RAM
9691036ADDRESS_MAP_END
9701037
9711038static ADDRESS_MAP_START( mazinger_sound_portmap, ADDRESS_SPACE_IO, 8 )
9721039   ADDRESS_MAP_GLOBAL_MASK(0xff)
973   AM_RANGE(0x00, 0x00) AM_WRITE(mazinger_rombank_w)         // ROM bank
974   AM_RANGE(0x10, 0x10) AM_WRITE(soundlatch_ack_w)            // To Main CPU
975   AM_RANGE(0x30, 0x30) AM_READ(soundlatch_lo_r)            // From Main CPU
976   AM_RANGE(0x50, 0x51) AM_DEVWRITE("ymsnd", ym2203_w)         // YM2203
977   AM_RANGE(0x52, 0x53) AM_DEVREAD("ymsnd", ym2203_r)            // YM2203
978   AM_RANGE(0x70, 0x70) AM_DEVWRITE("oki", okim6295_w)         // M6295
979   AM_RANGE(0x74, 0x74) AM_WRITE(hotdogst_okibank_w)         // Samples bank
1040   AM_RANGE(0x00, 0x00) AM_WRITE(mazinger_rombank_w)   // ROM bank
1041   AM_RANGE(0x10, 0x10) AM_WRITE(soundlatch_ack_w)      // To Main CPU
1042   AM_RANGE(0x30, 0x30) AM_READ(soundlatch_lo_r)      // From Main CPU
1043   AM_RANGE(0x50, 0x51) AM_DEVWRITE("ymsnd", ym2203_w)   // YM2203
1044   AM_RANGE(0x52, 0x53) AM_DEVREAD("ymsnd", ym2203_r)   // YM2203
1045   AM_RANGE(0x70, 0x70) AM_DEVWRITE("oki", okim6295_w)   // M6295
1046   AM_RANGE(0x74, 0x74) AM_WRITE(hotdogst_okibank_w)   // Samples bank
9801047ADDRESS_MAP_END
9811048
9821049
r7640r7641
10111078}
10121079
10131080static ADDRESS_MAP_START( metmqstr_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
1014   AM_RANGE(0x0000, 0x3fff) AM_ROM                        // ROM
1015   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")                  // ROM (Banked)
1016   AM_RANGE(0xe000, 0xffff) AM_RAM                        // RAM
1081   AM_RANGE(0x0000, 0x3fff) AM_ROM               // ROM
1082   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")   // ROM (Banked)
1083   AM_RANGE(0xe000, 0xffff) AM_RAM               // RAM
10171084ADDRESS_MAP_END
10181085
10191086static ADDRESS_MAP_START( metmqstr_sound_portmap, ADDRESS_SPACE_IO, 8 )
10201087   ADDRESS_MAP_GLOBAL_MASK(0xff)
1021   AM_RANGE(0x00, 0x00) AM_WRITE(metmqstr_rombank_w)            // Rom Bank
1022   AM_RANGE(0x20, 0x20) AM_READ(soundflags_r)                  // Communication
1023   AM_RANGE(0x30, 0x30) AM_READ(soundlatch_lo_r)               // From Main CPU
1024   AM_RANGE(0x40, 0x40) AM_READ(soundlatch_hi_r)               //
1088   AM_RANGE(0x00, 0x00) AM_WRITE(metmqstr_rombank_w)               // Rom Bank
1089   AM_RANGE(0x20, 0x20) AM_READ(soundflags_r)                     // Communication
1090   AM_RANGE(0x30, 0x30) AM_READ(soundlatch_lo_r)                  // From Main CPU
1091   AM_RANGE(0x40, 0x40) AM_READ(soundlatch_hi_r)                  //
10251092   AM_RANGE(0x50, 0x51) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)   // YM2151
1026   AM_RANGE(0x60, 0x60) AM_DEVWRITE("oki1", okim6295_w)         // M6295 #0
1027   AM_RANGE(0x70, 0x70) AM_WRITE(metmqstr_okibank0_w)            // Samples Bank #0
1028   AM_RANGE(0x80, 0x80) AM_DEVWRITE("oki2", okim6295_w)         // M6295 #1
1029   AM_RANGE(0x90, 0x90) AM_WRITE(metmqstr_okibank1_w)            // Samples Bank #1
1093   AM_RANGE(0x60, 0x60) AM_DEVWRITE("oki1", okim6295_w)            // M6295 #0
1094   AM_RANGE(0x70, 0x70) AM_WRITE(metmqstr_okibank0_w)               // Samples Bank #0
1095   AM_RANGE(0x80, 0x80) AM_DEVWRITE("oki2", okim6295_w)            // M6295 #1
1096   AM_RANGE(0x90, 0x90) AM_WRITE(metmqstr_okibank1_w)               // Samples Bank #1
10301097ADDRESS_MAP_END
10311098
10321099
r7640r7641
10431110}
10441111
10451112static ADDRESS_MAP_START( pwrinst2_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
1046   AM_RANGE(0x0000, 0x7fff) AM_ROM                        // ROM
1047   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")                  // ROM (Banked)
1048   AM_RANGE(0xe000, 0xffff) AM_RAM                        // RAM
1113   AM_RANGE(0x0000, 0x7fff) AM_ROM               // ROM
1114   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")   // ROM (Banked)
1115   AM_RANGE(0xe000, 0xffff) AM_RAM               // RAM
10491116ADDRESS_MAP_END
10501117
10511118static ADDRESS_MAP_START( pwrinst2_sound_portmap, ADDRESS_SPACE_IO, 8 )
10521119   ADDRESS_MAP_GLOBAL_MASK(0xff)
10531120   AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)   // M6295
10541121   AM_RANGE(0x08, 0x08) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)   //
1055   AM_RANGE(0x10, 0x17) AM_DEVWRITE("nmk112", nmk112_okibank_w)                     // Samples bank
1056   AM_RANGE(0x40, 0x41) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)         //
1122   AM_RANGE(0x10, 0x17) AM_DEVWRITE("nmk112", nmk112_okibank_w)         // Samples bank
1123   AM_RANGE(0x40, 0x41) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)      //
10571124   AM_RANGE(0x50, 0x50) AM_WRITE(soundlatch_ack_w)                     // To Main CPU
1058//  AM_RANGE(0x51, 0x51) AM_WRITENOP                                  // ?? volume
1125//  AM_RANGE(0x51, 0x51) AM_WRITENOP                                         // ?? volume
10591126   AM_RANGE(0x80, 0x80) AM_WRITE(pwrinst2_rombank_w)                  // ROM bank
10601127   AM_RANGE(0x60, 0x60) AM_READ(soundlatch_hi_r)                     // From Main CPU
10611128   AM_RANGE(0x70, 0x70) AM_READ(soundlatch_lo_r)                     //
r7640r7641
11051172}
11061173
11071174static ADDRESS_MAP_START( sailormn_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
1108   AM_RANGE(0x0000, 0x3fff) AM_ROM                                             // ROM
1109   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")                                       // ROM (Banked)
1175   AM_RANGE(0x0000, 0x3fff) AM_ROM                              // ROM
1176   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")                  // ROM (Banked)
11101177   AM_RANGE(0xc000, 0xdfff) AM_READWRITE(mirror_ram_r, mirror_ram_w) AM_BASE_MEMBER(cave_state, mirror_ram)   // RAM
1111   AM_RANGE(0xe000, 0xffff) AM_READWRITE(mirror_ram_r, mirror_ram_w)                  // Mirrored RAM (agallet)
1178   AM_RANGE(0xe000, 0xffff) AM_READWRITE(mirror_ram_r, mirror_ram_w)   // Mirrored RAM (agallet)
11121179ADDRESS_MAP_END
11131180
11141181static ADDRESS_MAP_START( sailormn_sound_portmap, ADDRESS_SPACE_IO, 8 )
r7640r7641
11181185   AM_RANGE(0x20, 0x20) AM_READ(soundflags_r)                        // Communication
11191186   AM_RANGE(0x30, 0x30) AM_READ(soundlatch_lo_r)                     // From Main CPU
11201187   AM_RANGE(0x40, 0x40) AM_READ(soundlatch_hi_r)                     //
1121   AM_RANGE(0x50, 0x51) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)         // YM2151
1188   AM_RANGE(0x50, 0x51) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)      // YM2151
11221189   AM_RANGE(0x60, 0x60) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)   // M6295 #0
11231190   AM_RANGE(0x70, 0x70) AM_WRITE(sailormn_okibank0_w)                  // Samples Bank #0
11241191   AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)   // M6295 #1
r7640r7641
12861353   PORT_DIPSETTING(      0x0000, DEF_STR( Hardest ) )
12871354INPUT_PORTS_END
12881355
1289/* Mazinger Z (has region stored in Eeprom) */
1290static INPUT_PORTS_START( mazinger )
1291   PORT_INCLUDE( cave )
12921356
1293   PORT_START("EEPROM")   // Eeprom Region
1294   PORT_DIPNAME( 0xff, 0x31, DEF_STR( Region ) )
1295   PORT_DIPSETTING(    0x30, DEF_STR( Japan ) )
1296   PORT_DIPSETTING(    0x31, DEF_STR( World ) )
1297INPUT_PORTS_END
1298
1299/* Sailor Moon / Air Gallet (has region stored in Eeprom) */
1300static INPUT_PORTS_START( sailormn )
1301   PORT_INCLUDE( cave )
1302
1303   PORT_START("EEPROM")   // Eeprom Region
1304   PORT_DIPNAME( 0xff, 0x02, DEF_STR( Region ) )
1305   PORT_DIPSETTING(    0x00, DEF_STR( Japan ) )
1306   PORT_DIPSETTING(    0x01, DEF_STR( USA ) )
1307   PORT_DIPSETTING(    0x02, DEF_STR( Europe ) )
1308   PORT_DIPSETTING(    0x03, "Hong Kong" )
1309   PORT_DIPSETTING(    0x04, "Taiwan" )
1310   PORT_DIPSETTING(    0x05, "Korea" )
1311INPUT_PORTS_END
1312
13131357/* Normal layout but with 4 buttons */
13141358static INPUT_PORTS_START( metmqstr )
13151359   PORT_INCLUDE( cave )
r7640r7641
13991443   PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
14001444INPUT_PORTS_END
14011445
1446static INPUT_PORTS_START( tjumpman )
1447   PORT_START("IN0")
1448   PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW )
1449   PORT_BIT( 0x02, IP_ACTIVE_LOW,  IPT_UNKNOWN )
1450   PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_UNKNOWN )
1451   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("eeprom", eeprom_read_bit)
1452   PORT_BIT( 0x10, IP_ACTIVE_LOW,  IPT_OTHER ) PORT_NAME( DEF_STR( Yes ) ) PORT_CODE(KEYCODE_Y)   // suru ("do")
1453   PORT_BIT( 0x20, IP_ACTIVE_LOW,  IPT_GAMBLE_PAYOUT )
1454   PORT_BIT( 0x40, IP_ACTIVE_LOW,  IPT_BUTTON1 ) PORT_NAME( "1 Bet" )
1455   PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_SPECIAL ) PORT_CUSTOM(tjumpman_hopper_r, NULL)
14021456
1457   PORT_START("IN1")
1458   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
1459   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1460   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
1461   PORT_CONFNAME( 0x08, 0x08, "Self Test" )
1462   PORT_CONFSETTING(    0x08, DEF_STR( Off ) )
1463   PORT_CONFSETTING(    0x00, DEF_STR( On ) )
1464   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2  ) PORT_NAME( DEF_STR( No ) ) PORT_CODE(KEYCODE_N)   // shinai ("not")
1465   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME( "Go" )
1466   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1   )                                       // medal
1467   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME( "3 Bet" )
1468INPUT_PORTS_END
1469
1470
14031471/***************************************************************************
14041472
14051473
r7640r7641
14571525   8*8*8
14581526};
14591527
1528/* 8x8x8 tiles, split in two roms (low / high nibble) */
1529static const gfx_layout layout_8x8x8_split =
1530{
1531   8,8,
1532   RGN_FRAC(1,2),
1533   8,
1534   {STEP4(RGN_FRAC(1,2),1), STEP4(0,1)},
1535   {STEP8(0,4)},
1536   {STEP8(0,4*8)},
1537   8*8*4
1538};
1539
14601540#if 0
14611541/* 16x16x8 Zooming Sprites - No need to decode them */
14621542static const gfx_layout layout_sprites =
r7640r7641
14811561       for consistency with games having $8000 real colors.
14821562       A PALETTE_INIT function is thus needed for sprites */
14831563
1484//    "gfx1"                                       // Sprites
1485   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
1486   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4,   0x4400, 0x40 ) // [1] Layer 1
1564//  "sprites"
1565   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
1566   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x4,   0x4400, 0x40 ) // [1] Layer 1
14871567GFXDECODE_END
14881568
14891569/***************************************************************************
r7640r7641
14971577       in the color table). Layer 2 uses the whole 256 for any given
14981578       color code and the 4000-7fff range in the color table.   */
14991579
1500//    "gfx1"                                       // Sprites
1501   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x8000, 0x40 ) // [0] Layer 0
1502   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4,   0x8000, 0x40 ) // [1] Layer 1
1503   GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x8,   0x4000, 0x40 ) // [2] Layer 2
1580//  "sprites"
1581   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x8000, 0x40 ) // [0] Layer 0
1582   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x4,   0x8000, 0x40 ) // [1] Layer 1
1583   GFXDECODE_ENTRY( "layer2", 0, layout_8x8x8,   0x4000, 0x40 ) // [2] Layer 2
15041584GFXDECODE_END
15051585
15061586/***************************************************************************
r7640r7641
15131593       for consistency with games having $8000 real colors.
15141594       A PALETTE_INIT function is thus needed for sprites */
15151595
1516//    "gfx1"                                       // Sprites
1517   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
1518   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4,   0x4400, 0x40 ) // [1] Layer 1
1519   GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x4,   0x4400, 0x40 ) // [2] Layer 2
1596//  "sprites"
1597   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
1598   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x4,   0x4400, 0x40 ) // [1] Layer 1
1599   GFXDECODE_ENTRY( "layer2", 0, layout_8x8x4,   0x4400, 0x40 ) // [2] Layer 2
15201600GFXDECODE_END
15211601
15221602/***************************************************************************
r7640r7641
15241604***************************************************************************/
15251605
15261606static GFXDECODE_START( esprade )
1527//    "gfx1"                                       // Sprites
1528   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x8,   0x4000, 0x40 ) // [0] Layer 0
1529   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x8,   0x4000, 0x40 ) // [1] Layer 1
1530   GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x8,   0x4000, 0x40 ) // [2] Layer 2
1607//  "sprites"
1608   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x8,   0x4000, 0x40 ) // [0] Layer 0
1609   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x8,   0x4000, 0x40 ) // [1] Layer 1
1610   GFXDECODE_ENTRY( "layer2", 0, layout_8x8x8,   0x4000, 0x40 ) // [2] Layer 2
15311611GFXDECODE_END
15321612
15331613/***************************************************************************
r7640r7641
15401620       for consistency with games having $8000 real colors.
15411621       A PALETTE_INIT function is needed for sprites */
15421622
1543//    "gfx1"                                       // Sprites
1544   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x4000, 0x40 ) // [0] Layer 0
1545   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4,   0x4000, 0x40 ) // [1] Layer 1
1546   GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x4,   0x4000, 0x40 ) // [2] Layer 2
1623//  "sprites"
1624   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x4000, 0x40 ) // [0] Layer 0
1625   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x4,   0x4000, 0x40 ) // [1] Layer 1
1626   GFXDECODE_ENTRY( "layer2", 0, layout_8x8x4,   0x4000, 0x40 ) // [2] Layer 2
15471627GFXDECODE_END
15481628
15491629/***************************************************************************
r7640r7641
15511631***************************************************************************/
15521632
15531633static GFXDECODE_START( korokoro )
1554//    "gfx1"                                       // Sprites
1555   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
1634//  "sprites"
1635   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
15561636GFXDECODE_END
15571637
15581638/***************************************************************************
r7640r7641
15681648        $40 color codes, only $400 colors are addressable.
15691649        A PALETTE_INIT function is thus needed for sprites and layer 0.   */
15701650
1571//    "gfx1"                                       // Sprites
1572   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x4000, 0x40 ) // [0] Layer 0
1573   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x6,   0x4400, 0x40 ) // [1] Layer 1
1651//  "sprites"
1652   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x4000, 0x40 ) // [0] Layer 0
1653   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x6,   0x4400, 0x40 ) // [1] Layer 1
15741654GFXDECODE_END
15751655
15761656
r7640r7641
15791659***************************************************************************/
15801660
15811661static GFXDECODE_START( pwrinst2 )
1582//    "gfx1"                                       // Sprites
1583   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x0800+0x8000, 0x40 ) // [0] Layer 0
1584   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4,   0x1000+0x8000, 0x40 ) // [1] Layer 1
1585   GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x4,   0x1800+0x8000, 0x40 ) // [2] Layer 2
1586   GFXDECODE_ENTRY( "gfx5", 0, layout_8x8x4,   0x2000+0x8000, 0x40 ) // [3] Layer 3
1662//  "sprites"
1663   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x0800+0x8000, 0x40 ) // [0] Layer 0
1664   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x4,   0x1000+0x8000, 0x40 ) // [1] Layer 1
1665   GFXDECODE_ENTRY( "layer2", 0, layout_8x8x4,   0x1800+0x8000, 0x40 ) // [2] Layer 2
1666   GFXDECODE_ENTRY( "layer3", 0, layout_8x8x4,   0x2000+0x8000, 0x40 ) // [3] Layer 3
15871667GFXDECODE_END
15881668
15891669
r7640r7641
15931673
15941674static GFXDECODE_START( sailormn )
15951675   /* 4 bit sprites ? */
1596//    "gfx1"                                       // Sprites
1597   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
1598   GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4,   0x4800, 0x40 ) // [1] Layer 1
1599   GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x6_2,   0x4c00, 0x40 ) // [2] Layer 2
1676//  "sprites"
1677   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x4,   0x4400, 0x40 ) // [0] Layer 0
1678   GFXDECODE_ENTRY( "layer1", 0, layout_8x8x4,   0x4800, 0x40 ) // [1] Layer 1
1679   GFXDECODE_ENTRY( "layer2", 0, layout_8x8x6_2,   0x4c00, 0x40 ) // [2] Layer 2
16001680GFXDECODE_END
16011681
16021682
16031683/***************************************************************************
1684                            Tobikose! Jumpman
1685***************************************************************************/
1686
1687static GFXDECODE_START( tjumpman )
1688//  "sprites"
1689   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x8_split,   0x4000, 0x40 ) // [0] Layer 0
1690GFXDECODE_END
1691
1692
1693/***************************************************************************
16041694                                Uo Poko
16051695***************************************************************************/
16061696
16071697static GFXDECODE_START( uopoko )
1608//    "gfx1"                                       // Sprites
1609   GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x8,   0x4000, 0x40 ) // [0] Layer 0
1698//  "sprites"
1699   GFXDECODE_ENTRY( "layer0", 0, layout_8x8x8,   0x4000, 0x40 ) // [0] Layer 0
16101700GFXDECODE_END
16111701
16121702
r7640r7641
16411731   memset(state->soundbuf_data, 0, 32);
16421732   state->soundbuf_len = 0;
16431733
1644   /* modify the eeprom on a reset with the desired region for the games that have the region factory set in eeprom */
1645   if (state->region_byte >= 0)
1646      memory_write_byte(cputag_get_address_space(machine, "eeprom", ADDRESS_SPACE_0), state->region_byte, input_port_read(machine, "EEPROM"));
1647
16481734   state->vblank_irq = 0;
16491735   state->sound_irq = 0;
16501736   state->unknown_irq = 0;
r7640r7641
17041790
17051791   MDRV_GFXDECODE(dfeveron)
17061792   MDRV_PALETTE_LENGTH(0x8000)   /* $8000 palette entries for consistency with the other games */
1793   MDRV_PALETTE_INIT(dfeveron)
17071794
1708   MDRV_PALETTE_INIT(dfeveron)
17091795   MDRV_VIDEO_START(cave_2_layers)
17101796   MDRV_VIDEO_UPDATE(cave)
17111797
r7640r7641
17481834
17491835   MDRV_GFXDECODE(ddonpach)
17501836   MDRV_PALETTE_LENGTH(0x8000 + 0x40*16)   // $400 extra entries for layers 1&2
1837   MDRV_PALETTE_INIT(ddonpach)
17511838
1752   MDRV_PALETTE_INIT(ddonpach)
17531839   MDRV_VIDEO_START(cave_3_layers)
17541840   MDRV_VIDEO_UPDATE(cave)
17551841
r7640r7641
17961882
17971883   MDRV_GFXDECODE(donpachi)
17981884   MDRV_PALETTE_LENGTH(0x8000)   /* $8000 palette entries for consistency with the other games */
1885   MDRV_PALETTE_INIT(dfeveron)
17991886
1800   MDRV_PALETTE_INIT(dfeveron)
18011887   MDRV_VIDEO_START(cave_3_layers)
18021888   MDRV_VIDEO_UPDATE(cave)
18031889
r7640r7641
18461932
18471933   MDRV_GFXDECODE(esprade)
18481934   MDRV_PALETTE_LENGTH(0x8000)
1935   MDRV_PALETTE_INIT(cave)
18491936
1850   MDRV_PALETTE_INIT(cave)
18511937   MDRV_VIDEO_START(cave_3_layers)
18521938   MDRV_VIDEO_UPDATE(cave)
18531939
r7640r7641
18881974
18891975   MDRV_GFXDECODE(esprade)
18901976   MDRV_PALETTE_LENGTH(0x8000)
1977   MDRV_PALETTE_INIT(cave)
18911978
1892   MDRV_PALETTE_INIT(cave)
18931979   MDRV_VIDEO_START(cave_3_layers)
18941980   MDRV_VIDEO_UPDATE(cave)
18951981
r7640r7641
19312017
19322018   MDRV_GFXDECODE(esprade)
19332019   MDRV_PALETTE_LENGTH(0x8000)
2020   MDRV_PALETTE_INIT(cave)
19342021
1935   MDRV_PALETTE_INIT(cave)
19362022   MDRV_VIDEO_START(cave_3_layers)
19372023   MDRV_VIDEO_UPDATE(cave)
19382024
r7640r7641
19772063
19782064   MDRV_GFXDECODE(hotdogst)
19792065   MDRV_PALETTE_LENGTH(0x8000)   /* $8000 palette entries for consistency with the other games */
2066   MDRV_PALETTE_INIT(dfeveron)
19802067
1981   MDRV_PALETTE_INIT(dfeveron)
19822068   MDRV_VIDEO_START(cave_3_layers)
19832069   MDRV_VIDEO_UPDATE(cave)
19842070
r7640r7641
20312117
20322118   MDRV_GFXDECODE(korokoro)
20332119   MDRV_PALETTE_LENGTH(0x8000)   /* $8000 palette entries for consistency with the other games */
2120   MDRV_PALETTE_INIT(korokoro)
20342121
2035   MDRV_PALETTE_INIT(korokoro)
20362122   MDRV_VIDEO_START(cave_1_layer)
20372123   MDRV_VIDEO_UPDATE(cave)
20382124
r7640r7641
20452131   MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
20462132MACHINE_DRIVER_END
20472133
2134static MACHINE_DRIVER_START( crusherm )
20482135
2136   /* driver data */
2137   MDRV_IMPORT_FROM( korokoro )
2138
2139   /* basic machine hardware */
2140   MDRV_CPU_MODIFY("maincpu")
2141   MDRV_CPU_PROGRAM_MAP(crusherm_map)
2142MACHINE_DRIVER_END
2143
2144
20492145/***************************************************************************
20502146                                Mazinger Z
20512147***************************************************************************/
r7640r7641
20802176
20812177   MDRV_GFXDECODE(mazinger)
20822178   MDRV_PALETTE_LENGTH(0x8000)   /* $8000 palette entries for consistency with the other games */
2179   MDRV_PALETTE_INIT(mazinger)
20832180
2084   MDRV_PALETTE_INIT(mazinger)
20852181   MDRV_VIDEO_START(cave_2_layers)
20862182   MDRV_VIDEO_UPDATE(cave)
20872183
r7640r7641
21402236
21412237   MDRV_GFXDECODE(donpachi)
21422238   MDRV_PALETTE_LENGTH(0x8000)   /* $8000 palette entries for consistency with the other games */
2239   MDRV_PALETTE_INIT(dfeveron)
21432240
2144   MDRV_PALETTE_INIT(dfeveron)
21452241   MDRV_VIDEO_START(cave_3_layers)
21462242   MDRV_VIDEO_UPDATE(cave)
21472243
r7640r7641
22042300
22052301   MDRV_GFXDECODE(pwrinst2)
22062302   MDRV_PALETTE_LENGTH(0x8000+0x2800)
2303   MDRV_PALETTE_INIT(pwrinst2)
22072304
2208   MDRV_PALETTE_INIT(pwrinst2)
22092305   MDRV_VIDEO_START(cave_4_layers)
22102306   MDRV_VIDEO_UPDATE(cave)
22112307
r7640r7641
22712367
22722368   MDRV_GFXDECODE(sailormn)
22732369   MDRV_PALETTE_LENGTH(0x8000)   /* $8000 palette entries for consistency with the other games */
2370   MDRV_PALETTE_INIT(sailormn)   // 4 bit sprites, 6 bit tiles
22742371
2275   MDRV_PALETTE_INIT(sailormn)   // 4 bit sprites, 6 bit tiles
22762372   MDRV_VIDEO_START(sailormn_3_layers)   /* Layer 2 has 1 banked ROM */
22772373   MDRV_VIDEO_UPDATE(cave)
22782374
r7640r7641
22962392
22972393
22982394/***************************************************************************
2395                            Tobikose! Jumpman
2396***************************************************************************/
2397
2398static MACHINE_DRIVER_START( tjumpman )
2399
2400   /* driver data */
2401   MDRV_DRIVER_DATA(cave_state)
2402
2403   MDRV_NVRAM_HANDLER(generic_0fill)
2404
2405   /* basic machine hardware */
2406   MDRV_CPU_ADD("maincpu", M68000, XTAL_28MHz / 2)
2407   MDRV_CPU_PROGRAM_MAP(tjumpman_map)
2408   MDRV_CPU_VBLANK_INT("screen", cave_interrupt)
2409
2410   MDRV_WATCHDOG_TIME_INIT(SEC(3))   /* a guess, and certainly wrong */
2411
2412   MDRV_MACHINE_START(cave)
2413   MDRV_MACHINE_RESET(cave)
2414   MDRV_EEPROM_93C46_ADD("eeprom")
2415
2416   /* video hardware */
2417   MDRV_SCREEN_ADD("screen", RASTER)
2418   MDRV_SCREEN_REFRESH_RATE(15625/271.5)
2419   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
2420   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
2421   MDRV_SCREEN_SIZE(0x200, 240)
2422   MDRV_SCREEN_VISIBLE_AREA(0x80, 0x80 + 0x140-1, 0, 240-1)
2423
2424   MDRV_GFXDECODE(tjumpman)
2425   MDRV_PALETTE_LENGTH(0x8000)
2426   MDRV_PALETTE_INIT(cave)
2427
2428   MDRV_VIDEO_START(cave_1_layer)
2429   MDRV_VIDEO_UPDATE(cave)
2430
2431   /* sound hardware */
2432   MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
2433
2434   MDRV_SOUND_ADD("oki1", OKIM6295, XTAL_28MHz / 28)
2435   MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // clock frequency & pin 7 not verified
2436   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
2437   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
2438
2439   // oki2 spot is unpopulated
2440MACHINE_DRIVER_END
2441
2442
2443/***************************************************************************
22992444                                Uo Poko
23002445***************************************************************************/
23012446
r7640r7641
23482493/* 4 bits -> 8 bits. Even and odd pixels are swapped */
23492494static void unpack_sprites(running_machine *machine)
23502495{
2351   const UINT32 len   =   memory_region_length(machine, "gfx1");
2352   UINT8 *rgn      =   memory_region(machine, "gfx1");
2353   UINT8 *src      =   rgn + len / 2 - 1;
2354   UINT8 *dst      =   rgn + len - 1;
2496   const UINT32 len   =   memory_region_length(machine, "sprites");
2497   UINT8 *rgn         =   memory_region       (machine, "sprites");
2498   UINT8 *src         =   rgn + len / 2 - 1;
2499   UINT8 *dst         =   rgn + len - 1;
23552500
23562501   while(dst > src)
23572502   {
r7640r7641
23652510/* 4 bits -> 8 bits. Even and odd pixels and even and odd words, are swapped */
23662511static void ddonpach_unpack_sprites(running_machine *machine)
23672512{
2368   const UINT32 len   =   memory_region_length(machine, "gfx1");
2369   UINT8 *rgn      =   memory_region(machine, "gfx1");
2370   UINT8 *src      =   rgn + len / 2 - 1;
2371   UINT8 *dst      =   rgn + len - 1;
2513   const UINT32 len   =   memory_region_length(machine, "sprites");
2514   UINT8 *rgn         =   memory_region       (machine, "sprites");
2515   UINT8 *src         =   rgn + len / 2 - 1;
2516   UINT8 *dst         =   rgn + len - 1;
23722517
23732518   while(dst > src)
23742519   {
r7640r7641
23892534/* 2 pages of 4 bits -> 8 bits */
23902535static void esprade_unpack_sprites(running_machine *machine)
23912536{
2392   UINT8 *src      =   memory_region(machine, "gfx1");
2393   UINT8 *dst      =   src + memory_region_length(machine, "gfx1");
2537   UINT8 *src      =   memory_region(machine, "sprites");
2538   UINT8 *dst      =   src + memory_region_length(machine, "sprites");
23942539
23952540   while(src < dst)
23962541   {
r7640r7641
24462591
24472592***************************************************************************/
24482593
2449ROM_START( agallet ) /* PCB showed "Taiwan Only" on the copyright notice screen. Region byte in EEPROM */
2450   ROM_REGION( 0x400000, "maincpu", 0 )      /* 68000 code */
2451   ROM_LOAD16_WORD_SWAP( "bp962a.u45", 0x000000, 0x080000, CRC(24815046) SHA1(f5eeae60b923ae850b335e7898a2760407631d8b) )
2452   //empty
24532594
2454   ROM_REGION( 0x88000, "audiocpu", 0 )   /* Z80 code */
2455   ROM_LOAD( "bp962a.u9",  0x00000, 0x08000, CRC(06caddbe) SHA1(6a3cc50558ba19a31b21b7f3ec6c6e2846244ff1) )   // 1xxxxxxxxxxxxxxxxxx = 0xFF
2456   ROM_CONTINUE(           0x10000, 0x78000             )
24572595
2458   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
2459   ROM_LOAD( "bp962a.u76", 0x000000, 0x200000, CRC(858da439) SHA1(33a3d2a3ec3fa3364b00e1e43b405e5030a5b2a3) )
2460   ROM_LOAD( "bp962a.u77", 0x200000, 0x200000, CRC(ea2ba35e) SHA1(72487f21d44fe7be9a98068ce7f57a43c132945f) )
2596#define ROMS_AGALLET \
2597   ROM_REGION( 0x400000, "maincpu", 0 ) \
2598   ROM_LOAD16_WORD_SWAP( "bp962a.u45", 0x000000, 0x080000, CRC(24815046) SHA1(f5eeae60b923ae850b335e7898a2760407631d8b) ) \
2599   \
2600   ROM_REGION( 0x88000, "audiocpu", 0 ) \
2601   ROM_LOAD( "bp962a.u9",  0x00000, 0x08000, CRC(06caddbe) SHA1(6a3cc50558ba19a31b21b7f3ec6c6e2846244ff1) ) \
2602   ROM_CONTINUE(           0x10000, 0x78000             ) \
2603   \
2604   ROM_REGION( 0x400000 * 2, "sprites", 0 ) \
2605   ROM_LOAD( "bp962a.u76", 0x000000, 0x200000, CRC(858da439) SHA1(33a3d2a3ec3fa3364b00e1e43b405e5030a5b2a3) ) \
2606   ROM_LOAD( "bp962a.u77", 0x200000, 0x200000, CRC(ea2ba35e) SHA1(72487f21d44fe7be9a98068ce7f57a43c132945f) ) \
2607   \
2608   ROM_REGION( 0x100000, "layer0", 0 ) \
2609   ROM_LOAD( "bp962a.u53", 0x000000, 0x100000, CRC(fcd9a107) SHA1(169b94db8389e7d47d4d77f36907a62c30fea727) ) \
2610   ROM_CONTINUE(           0x000000, 0x100000             ) \
2611   \
2612   ROM_REGION( 0x200000, "layer1", 0 )   \
2613   ROM_LOAD( "bp962a.u54", 0x000000, 0x200000, CRC(0cfa3409) SHA1(17107e26762ef7e3b902fb29a6d7bc534a4d09aa) ) \
2614   \
2615   ROM_REGION( (1*0x200000)*2, "layer2", 0 )   \
2616   \
2617   ROM_LOAD( "bp962a.u57", 0x000000, 0x200000, CRC(6d608957) SHA1(15f6e8346f5f95eb229505b1b4666dabeb810ee8) ) \
2618   \
2619   ROM_LOAD( "bp962a.u65", 0x200000, 0x100000, CRC(135fcf9a) SHA1(2e8c89c2627bbdef160d96724d07883fb2fa1a57) ) \
2620   ROM_CONTINUE(           0x200000, 0x100000             ) \
2621   \
2622   ROM_REGION( 0x240000, "oki1", 0 ) \
2623   ROM_LOAD( "bp962a.u48", 0x040000, 0x200000, CRC(ae00a1ce) SHA1(5e8c74df0ac77efb3080406870856f958be14f79) ) \
2624   \
2625   ROM_REGION( 0x240000, "oki2", 0 )   \
2626   ROM_LOAD( "bp962a.u47", 0x040000, 0x200000, CRC(6d4e9737) SHA1(81c7ecdfc2d38d0b35e26745866f6672f566f936) ) \
24612627
2462   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
2463   ROM_LOAD( "bp962a.u53", 0x000000, 0x100000, CRC(fcd9a107) SHA1(169b94db8389e7d47d4d77f36907a62c30fea727) )   // FIRST AND SECOND HALF IDENTICAL
2464   ROM_CONTINUE(           0x000000, 0x100000             )
2628/* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */
2629ROM_START( agallet )
2630   ROMS_AGALLET
24652631
2466   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
2467   ROM_LOAD( "bp962a.u54", 0x000000, 0x200000, CRC(0cfa3409) SHA1(17107e26762ef7e3b902fb29a6d7bc534a4d09aa) )
2632   ROM_REGION16_BE( 0x80, "eeprom", 0 )
2633   ROM_LOAD16_WORD( "agallet_europe.nv", 0x0000, 0x0080, CRC(ec38bf65) SHA1(cb8d9eacc0cf55a0c6b187e6673e3354554314b5) )
2634ROM_END
24682635
2469   ROM_REGION( (1*0x200000)*2, "gfx4", 0 )   /* Layer 2 */
2470   /* 4 bit part */
2471   ROM_LOAD( "bp962a.u57", 0x000000, 0x200000, CRC(6d608957) SHA1(15f6e8346f5f95eb229505b1b4666dabeb810ee8) )
2472   /* 2 bit part */
2473   ROM_LOAD( "bp962a.u65", 0x200000, 0x100000, CRC(135fcf9a) SHA1(2e8c89c2627bbdef160d96724d07883fb2fa1a57) )   // FIRST AND SECOND HALF IDENTICAL
2474   ROM_CONTINUE(           0x200000, 0x100000             )
2636ROM_START( agalletu )
2637   ROMS_AGALLET
24752638
2476   ROM_REGION( 0x240000, "oki1", 0 )   /* OKIM6295 #0 Samples */
2477   /* Leave the 0x40000 bytes addressable by the chip empty */
2478   ROM_LOAD( "bp962a.u48", 0x040000, 0x200000, CRC(ae00a1ce) SHA1(5e8c74df0ac77efb3080406870856f958be14f79) )   // 16 x $20000, FIRST AND SECOND HALF IDENTICAL
2639   ROM_REGION16_BE( 0x80, "eeprom", 0 )
2640   ROM_LOAD16_WORD( "agallet_usa.nv", 0x0000, 0x0080, CRC(72e65056) SHA1(abf1a86df01064d9d5d8c418e8367817319ec335) )
2641ROM_END
24792642
2480   ROM_REGION( 0x240000, "oki2", 0 )   /* OKIM6295 #1 Samples */
2481   /* Leave the 0x40000 bytes addressable by the chip empty */
2482   ROM_LOAD( "bp962a.u47", 0x040000, 0x200000, CRC(6d4e9737) SHA1(81c7ecdfc2d38d0b35e26745866f6672f566f936) )   // 16 x $20000, FIRST AND SECOND HALF IDENTICAL
2643ROM_START( agalletj )
2644   ROMS_AGALLET
24832645
24842646   ROM_REGION16_BE( 0x80, "eeprom", 0 )
2485   ROM_LOAD16_WORD( "eeprom-agallet.bin", 0x0000, 0x0080, CRC(ec38bf65) SHA1(cb8d9eacc0cf55a0c6b187e6673e3354554314b5) )
2647   ROM_LOAD16_WORD( "agallet_japan.nv", 0x0000, 0x0080, CRC(0753f547) SHA1(aabb987470406b8729894108bc4d050f7200917d) )
24862648ROM_END
24872649
2650ROM_START( agalletk )
2651   ROMS_AGALLET
24882652
2653   ROM_REGION16_BE( 0x80, "eeprom", 0 )
2654   ROM_LOAD16_WORD( "agallet_korea.nv", 0x0000, 0x0080, CRC(7f41c253) SHA1(50793d4da0ad6eb590941d26a729a1cf4b3c25c2) )
2655ROM_END
2656
2657ROM_START( agallett ) // the dumped board was this region
2658   ROMS_AGALLET
2659
2660   ROM_REGION16_BE( 0x80, "eeprom", 0 )
2661   ROM_LOAD16_WORD( "agallet_taiwan.nv", 0x0000, 0x0080, CRC(0af46742) SHA1(37b704c4c573b2aabd6f016e9e8dd458f95148f7) )
2662ROM_END
2663
2664ROM_START( agalleth )
2665   ROMS_AGALLET
2666
2667   ROM_REGION16_BE( 0x80, "eeprom", 0 )
2668   ROM_LOAD16_WORD( "agallet_hongkong.nv", 0x0000, 0x0080, CRC(998d1a74) SHA1(13e7e27a18417949d49e97d521781fc0feeef792) )
2669ROM_END
2670
24892671/***************************************************************************
24902672
24912673              Fever SOS (International) / Dangun Feveron (Japan)
r7640r7641
25002682   ROM_LOAD16_BYTE( "cv01-u34.bin", 0x000000, 0x080000, CRC(be87f19d) SHA1(595239245df3835cdf5a99a6c62480465558d8d3) )
25012683   ROM_LOAD16_BYTE( "cv01-u33.bin", 0x000001, 0x080000, CRC(e53a7db3) SHA1(ddced29f78dc3cc89038757b6577ba2ba0d8b041) )
25022684
2503   ROM_REGION( 0x800000 * 2, "gfx1", 0 )      /* Sprites: * 2 , do not dispose */
2685   ROM_REGION( 0x800000 * 2, "sprites", 0 )      /* Sprites: * 2 */
25042686   ROM_LOAD( "cv01-u25.bin", 0x000000, 0x400000, CRC(a6f6a95d) SHA1(e1eb45cb5d0e6163edfd9d830633b913fb53c6ca) )
25052687   ROM_LOAD( "cv01-u26.bin", 0x400000, 0x400000, CRC(32edb62a) SHA1(3def74e1316b80cc25a8c3ac162cd7bcb8cc807c) )
25062688
2507   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
2689   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
25082690   ROM_LOAD( "cv01-u50.bin", 0x000000, 0x200000, CRC(7a344417) SHA1(828bd8f95d2fcc34407e17629ccafc904a4ea12d) )
25092691
2510   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
2692   ROM_REGION( 0x200000, "layer1", 0 )   /* Layer 1 */
25112693   ROM_LOAD( "cv01-u49.bin", 0x000000, 0x200000, CRC(d21cdda7) SHA1(cace4650de580c3c4a037f1f5c32bfc1846b383c) )
25122694
25132695   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
26062788   ROM_LOAD16_BYTE( "cv01-u34.sos", 0x000000, 0x080000, CRC(24ef3ce6) SHA1(42799eebbb2686a837b8972aec684143deadca59) )
26072789   ROM_LOAD16_BYTE( "cv01-u33.sos", 0x000001, 0x080000, CRC(64ff73fd) SHA1(7fc3a8469cec2361d373a4dac4a547c13ca5f709) )
26082790
2609   ROM_REGION( 0x800000 * 2, "gfx1", 0 )      /* Sprites: * 2 , do not dispose */
2791   ROM_REGION( 0x800000 * 2, "sprites", 0 )      /* Sprites: * 2 */
26102792   ROM_LOAD( "cv01-u25.bin", 0x000000, 0x400000, CRC(a6f6a95d) SHA1(e1eb45cb5d0e6163edfd9d830633b913fb53c6ca) )
26112793   ROM_LOAD( "cv01-u26.bin", 0x400000, 0x400000, CRC(32edb62a) SHA1(3def74e1316b80cc25a8c3ac162cd7bcb8cc807c) )
26122794
2613   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
2795   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
26142796   ROM_LOAD( "cv01-u50.bin", 0x000000, 0x200000, CRC(7a344417) SHA1(828bd8f95d2fcc34407e17629ccafc904a4ea12d) )
26152797
2616   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
2798   ROM_REGION( 0x200000, "layer1", 0 )   /* Layer 1 */
26172799   ROM_LOAD( "cv01-u49.bin", 0x000000, 0x200000, CRC(d21cdda7) SHA1(cace4650de580c3c4a037f1f5c32bfc1846b383c) )
26182800
26192801   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
26412823   ROM_LOAD16_BYTE( "b1.u27", 0x000000, 0x080000, CRC(b5cdc8d3) SHA1(58757b50e21a27e500a82c03f62cf02a85389926) )
26422824   ROM_LOAD16_BYTE( "b2.u26", 0x000001, 0x080000, CRC(6bbb063a) SHA1(e5de64b9c3efc0a38a2e0e16b78ee393bff63558) )
26432825
2644   ROM_REGION( 0x800000 * 2, "gfx1", 0 )      /* Sprites: * 2, do not dispose */
2826   ROM_REGION( 0x800000 * 2, "sprites", 0 )      /* Sprites: * 2 */
26452827   ROM_LOAD( "u50.bin", 0x000000, 0x200000, CRC(14b260ec) SHA1(33bda210302428d5500115d0c7a839cdfcb67d17) )
26462828   ROM_LOAD( "u51.bin", 0x200000, 0x200000, CRC(e7ba8cce) SHA1(ad74a6b7d53760b19587c4a6dbea937daa7e87ce) )
26472829   ROM_LOAD( "u52.bin", 0x400000, 0x200000, CRC(02492ee0) SHA1(64d9cc64a4ad189a8b03cf6a749ddb732b4a0014) )
26482830   ROM_LOAD( "u53.bin", 0x600000, 0x200000, CRC(cb4c10f0) SHA1(a622e8bd0c938b5d38b392b247400b744d8be288) )
26492831
2650   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
2832   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
26512833   ROM_LOAD( "u60.bin", 0x000000, 0x200000, CRC(903096a7) SHA1(a243e903fef7c4a7b71383263e82e42acd869261) )
26522834
2653   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
2835   ROM_REGION( 0x200000, "layer1", 0 )   /* Layer 1 */
26542836   ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(d89b7631) SHA1(a66bb4955ca58fab8973ca37a0f971e9a67ce017) )
26552837
2656   ROM_REGION( 0x200000, "gfx4", 0 )   /* Layer 2 */
2838   ROM_REGION( 0x200000, "layer2", 0 )   /* Layer 2 */
26572839   ROM_LOAD( "u62.bin", 0x000000, 0x200000, CRC(292bfb6b) SHA1(11b385991ee990eb5ef36e136b988802b5f90fa4) )
26582840
26592841   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
26702852   ROM_LOAD16_BYTE( "u27.bin", 0x000000, 0x080000, CRC(2432ff9b) SHA1(fbc826c30553f6553ead40b312b73c049e8f4bf6) )
26712853   ROM_LOAD16_BYTE( "u26.bin", 0x000001, 0x080000, CRC(4f3a914a) SHA1(ae98eba049f1462aa1145f6959b9f9a32c97278f) )
26722854
2673   ROM_REGION( 0x800000 * 2, "gfx1", 0 )      /* Sprites: * 2, do not dispose */
2855   ROM_REGION( 0x800000 * 2, "sprites", 0 )      /* Sprites: * 2 */
26742856   ROM_LOAD( "u50.bin", 0x000000, 0x200000, CRC(14b260ec) SHA1(33bda210302428d5500115d0c7a839cdfcb67d17) )
26752857   ROM_LOAD( "u51.bin", 0x200000, 0x200000, CRC(e7ba8cce) SHA1(ad74a6b7d53760b19587c4a6dbea937daa7e87ce) )
26762858   ROM_LOAD( "u52.bin", 0x400000, 0x200000, CRC(02492ee0) SHA1(64d9cc64a4ad189a8b03cf6a749ddb732b4a0014) )
26772859   ROM_LOAD( "u53.bin", 0x600000, 0x200000, CRC(cb4c10f0) SHA1(a622e8bd0c938b5d38b392b247400b744d8be288) )
26782860
2679   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
2861   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
26802862   ROM_LOAD( "u60.bin", 0x000000, 0x200000, CRC(903096a7) SHA1(a243e903fef7c4a7b71383263e82e42acd869261) )
26812863
2682   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
2864   ROM_REGION( 0x200000, "layer1", 0 )   /* Layer 1 */
26832865   ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(d89b7631) SHA1(a66bb4955ca58fab8973ca37a0f971e9a67ce017) )
26842866
2685   ROM_REGION( 0x200000, "gfx4", 0 )   /* Layer 2 */
2867   ROM_REGION( 0x200000, "layer2", 0 )   /* Layer 2 */
26862868   ROM_LOAD( "u62.bin", 0x000000, 0x200000, CRC(292bfb6b) SHA1(11b385991ee990eb5ef36e136b988802b5f90fa4) )
26872869
26882870   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
27372919   ROM_REGION( 0x080000, "maincpu", 0 )      /* 68000 code */
27382920   ROM_LOAD16_WORD_SWAP( "prgu.u29",     0x00000, 0x80000, CRC(89c36802) SHA1(7857c726cecca5a4fce282e0d2b873774d2c1b1d) )
27392921
2740   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
2922   ROM_REGION( 0x400000 * 2, "sprites", 0 )      /* Sprites */
27412923   ROM_LOAD( "atdp.u44", 0x000000, 0x200000, CRC(7189e953) SHA1(53adbe6ea5e01ecb48575e9db82cc3d0dc8a3726) )
27422924   ROM_LOAD( "atdp.u45", 0x200000, 0x200000, CRC(6984173f) SHA1(625dd6674adeb206815855b8b6a1fba79ed5c4cd) )
27432925
2744   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
2926   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
27452927   ROM_LOAD( "atdp.u54", 0x000000, 0x100000, CRC(6bda6b66) SHA1(6472e6706505bac17484fb8bf4e8922ced4adf63) )
27462928
2747   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
2929   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
27482930   ROM_LOAD( "atdp.u57", 0x000000, 0x100000, CRC(0a0e72b9) SHA1(997e8253777e7acca5a1c0c4026e78eecc122d5d) )
27492931
2750   ROM_REGION( 0x040000, "gfx4", 0 )   /* Text / Character Layer */
2932   ROM_REGION( 0x040000, "layer2", 0 )   /* Text / Character Layer */
27512933   ROM_LOAD( "text.u58", 0x000000, 0x040000, CRC(5dba06e7) SHA1(f9dab7f6c732a683fddb4cae090a875b3962332b) )
27522934
27532935   ROM_REGION( 0x240000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
27672949   ROM_REGION( 0x080000, "maincpu", 0 )      /* 68000 code */
27682950   ROM_LOAD16_WORD_SWAP( "prg.u29",     0x00000, 0x80000, CRC(6be14af6) SHA1(5b1158071f160efeded816ae4c4edca1d00d6e05) )
27692951
2770   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
2952   ROM_REGION( 0x400000 * 2, "sprites", 0 )      /* Sprites */
27712953   ROM_LOAD( "atdp.u44", 0x000000, 0x200000, CRC(7189e953) SHA1(53adbe6ea5e01ecb48575e9db82cc3d0dc8a3726) )
27722954   ROM_LOAD( "atdp.u45", 0x200000, 0x200000, CRC(6984173f) SHA1(625dd6674adeb206815855b8b6a1fba79ed5c4cd) )
27732955
2774   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
2956   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
27752957   ROM_LOAD( "atdp.u54", 0x000000, 0x100000, CRC(6bda6b66) SHA1(6472e6706505bac17484fb8bf4e8922ced4adf63) )
27762958
2777   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
2959   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
27782960   ROM_LOAD( "atdp.u57", 0x000000, 0x100000, CRC(0a0e72b9) SHA1(997e8253777e7acca5a1c0c4026e78eecc122d5d) )
27792961
2780   ROM_REGION( 0x040000, "gfx4", 0 )   /* Text / Character Layer */
2962   ROM_REGION( 0x040000, "layer2", 0 )   /* Text / Character Layer */
27812963   ROM_LOAD( "u58.bin", 0x000000, 0x040000, CRC(285379ff) SHA1(b9552edcec29ddf4b552800b145c398b94117ab0) )
27822964
27832965   ROM_REGION( 0x240000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
27972979   ROM_REGION( 0x080000, "maincpu", 0 )      /* 68000 code */
27982980   ROM_LOAD16_WORD_SWAP( "prgk.u26",    0x00000, 0x80000, CRC(bbaf4c8b) SHA1(0f9d42c8c4c5b69e3d39bf768bc4b663f66b4f36) )
27992981
2800   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
2982   ROM_REGION( 0x400000 * 2, "sprites", 0 )      /* Sprites */
28012983   ROM_LOAD( "atdp.u44", 0x000000, 0x200000, CRC(7189e953) SHA1(53adbe6ea5e01ecb48575e9db82cc3d0dc8a3726) )
28022984   ROM_LOAD( "atdp.u45", 0x200000, 0x200000, CRC(6984173f) SHA1(625dd6674adeb206815855b8b6a1fba79ed5c4cd) )
28032985
2804   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
2986   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
28052987   ROM_LOAD( "atdp.u54", 0x000000, 0x100000, CRC(6bda6b66) SHA1(6472e6706505bac17484fb8bf4e8922ced4adf63) )
28062988
2807   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
2989   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
28082990   ROM_LOAD( "atdp.u57", 0x000000, 0x100000, CRC(0a0e72b9) SHA1(997e8253777e7acca5a1c0c4026e78eecc122d5d) )
28092991
2810   ROM_REGION( 0x040000, "gfx4", 0 )   /* Text / Character Layer */
2992   ROM_REGION( 0x040000, "layer2", 0 )   /* Text / Character Layer */
28112993   ROM_LOAD( "u58.bin", 0x000000, 0x040000, CRC(285379ff) SHA1(b9552edcec29ddf4b552800b145c398b94117ab0) )
28122994
28132995   ROM_REGION( 0x240000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
28273009   ROM_REGION( 0x080000, "maincpu", 0 )      /* 68000 code */
28283010   ROM_LOAD16_WORD_SWAP( "37.u29",    0x00000, 0x80000, CRC(71f39f30) SHA1(08a028208f21c073d450a29061604f27775786a8) )
28293011
2830   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3012   ROM_REGION( 0x400000 * 2, "sprites", 0 )      /* Sprites */
28313013   ROM_LOAD( "atdp.u44", 0x000000, 0x200000, CRC(7189e953) SHA1(53adbe6ea5e01ecb48575e9db82cc3d0dc8a3726) )
28323014   ROM_LOAD( "atdp.u45", 0x200000, 0x200000, CRC(6984173f) SHA1(625dd6674adeb206815855b8b6a1fba79ed5c4cd) )
28333015
2834   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
3016   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
28353017   ROM_LOAD( "atdp.u54", 0x000000, 0x100000, CRC(6bda6b66) SHA1(6472e6706505bac17484fb8bf4e8922ced4adf63) )
28363018
2837   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
3019   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
28383020   ROM_LOAD( "atdp.u57", 0x000000, 0x100000, CRC(0a0e72b9) SHA1(997e8253777e7acca5a1c0c4026e78eecc122d5d) )
28393021
2840   ROM_REGION( 0x040000, "gfx4", 0 )   /* Text / Character Layer */
3022   ROM_REGION( 0x040000, "layer2", 0 )   /* Text / Character Layer */
28413023   ROM_LOAD( "u58.bin", 0x000000, 0x040000, CRC(285379ff) SHA1(b9552edcec29ddf4b552800b145c398b94117ab0) )
28423024
28433025   ROM_REGION( 0x240000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
28683050   ROM_LOAD16_BYTE( "u42.int", 0x000000, 0x080000, CRC(3b510a73) SHA1(ab1666eb826cb4a71588d86831dd18a2ef1c2a33) )
28693051   ROM_LOAD16_BYTE( "u41.int", 0x000001, 0x080000, CRC(97c1b649) SHA1(37a56b7b9662219a356aee3f4b5cbb774ac4950e) )
28703052
2871   ROM_REGION( 0x1000000, "gfx1", 0 )      /* Sprites (do not dispose) */
3053   ROM_REGION( 0x1000000, "sprites", 0 )      /* Sprites */
28723054   ROM_LOAD16_BYTE( "u63.bin", 0x000000, 0x400000, CRC(2f2fe92c) SHA1(9519e365248bcec8419786eabb16fe4aae299af5) )
28733055   ROM_LOAD16_BYTE( "u64.bin", 0x000001, 0x400000, CRC(491a3da4) SHA1(53549a2bd3edc7b5e73fb46e1421b156bb0c190f) )
28743056   ROM_LOAD16_BYTE( "u65.bin", 0x800000, 0x400000, CRC(06563efe) SHA1(94e72da1f542b4e0525b4b43994242816b43dbdc) )
28753057   ROM_LOAD16_BYTE( "u66.bin", 0x800001, 0x400000, CRC(7bbe4cfc) SHA1(e77d0ed7a11b5abca1df8a0eb20ac9360cf79e76) )
28763058
2877   ROM_REGION( 0x800000, "gfx2", 0 )   /* Layer 0 */
3059   ROM_REGION( 0x800000, "layer0", 0 )   /* Layer 0 */
28783060   ROM_LOAD( "u54.bin", 0x000000, 0x400000, CRC(e7ca6936) SHA1(b7f5ab67071a1d9dd3d2c1cd2304d9cdad68850c) )
28793061   ROM_LOAD( "u55.bin", 0x400000, 0x400000, CRC(f53bd94f) SHA1(d0a74fb3d36fe522ef075e5ae44a9980da8abe2f) )
28803062
2881   ROM_REGION( 0x800000, "gfx3", 0 )   /* Layer 1 */
3063   ROM_REGION( 0x800000, "layer1", 0 )   /* Layer 1 */
28823064   ROM_LOAD( "u52.bin", 0x000000, 0x400000, CRC(e7abe7b4) SHA1(e98da45497e1aaf0d6ab352ec3e43c7438ed792a) )
28833065   ROM_LOAD( "u53.bin", 0x400000, 0x400000, CRC(51a0f391) SHA1(8b7355cbad119f4e1add14e5cd5e343ec6706104) )
28843066
2885   ROM_REGION( 0x400000, "gfx4", 0 )   /* Layer 2 */
3067   ROM_REGION( 0x400000, "layer2", 0 )   /* Layer 2 */
28863068   ROM_LOAD( "u51.bin", 0x000000, 0x400000, CRC(0b9b875c) SHA1(ef05447cd8565ae24bb71db42342724622ad1e3e) )
28873069
28883070   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
28973079   ROM_LOAD16_BYTE( "u42.bin", 0x000000, 0x080000, CRC(75d03c42) SHA1(1c176185b6f1531752b633a97f705ffa0cfeb5ad) )
28983080   ROM_LOAD16_BYTE( "u41.bin", 0x000001, 0x080000, CRC(734b3ef0) SHA1(f584227b85c347d62d5f179445011ce0f607bcfd) )
28993081
2900   ROM_REGION( 0x1000000, "gfx1", 0 )      /* Sprites (do not dispose) */
3082   ROM_REGION( 0x1000000, "sprites", 0 )      /* Sprites */
29013083   ROM_LOAD16_BYTE( "u63.bin", 0x000000, 0x400000, CRC(2f2fe92c) SHA1(9519e365248bcec8419786eabb16fe4aae299af5) )
29023084   ROM_LOAD16_BYTE( "u64.bin", 0x000001, 0x400000, CRC(491a3da4) SHA1(53549a2bd3edc7b5e73fb46e1421b156bb0c190f) )
29033085   ROM_LOAD16_BYTE( "u65.bin", 0x800000, 0x400000, CRC(06563efe) SHA1(94e72da1f542b4e0525b4b43994242816b43dbdc) )
29043086   ROM_LOAD16_BYTE( "u66.bin", 0x800001, 0x400000, CRC(7bbe4cfc) SHA1(e77d0ed7a11b5abca1df8a0eb20ac9360cf79e76) )
29053087
2906   ROM_REGION( 0x800000, "gfx2", 0 )   /* Layer 0 */
3088   ROM_REGION( 0x800000, "layer0", 0 )   /* Layer 0 */
29073089   ROM_LOAD( "u54.bin", 0x000000, 0x400000, CRC(e7ca6936) SHA1(b7f5ab67071a1d9dd3d2c1cd2304d9cdad68850c) )
29083090   ROM_LOAD( "u55.bin", 0x400000, 0x400000, CRC(f53bd94f) SHA1(d0a74fb3d36fe522ef075e5ae44a9980da8abe2f) )
29093091
2910   ROM_REGION( 0x800000, "gfx3", 0 )   /* Layer 1 */
3092   ROM_REGION( 0x800000, "layer1", 0 )   /* Layer 1 */
29113093   ROM_LOAD( "u52.bin", 0x000000, 0x400000, CRC(e7abe7b4) SHA1(e98da45497e1aaf0d6ab352ec3e43c7438ed792a) )
29123094   ROM_LOAD( "u53.bin", 0x400000, 0x400000, CRC(51a0f391) SHA1(8b7355cbad119f4e1add14e5cd5e343ec6706104) )
29133095
2914   ROM_REGION( 0x400000, "gfx4", 0 )   /* Layer 2 */
3096   ROM_REGION( 0x400000, "layer2", 0 )   /* Layer 2 */
29153097   ROM_LOAD( "u51.bin", 0x000000, 0x400000, CRC(0b9b875c) SHA1(ef05447cd8565ae24bb71db42342724622ad1e3e) )
29163098
29173099   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
29263108   ROM_LOAD16_BYTE( "u42.old", 0x000000, 0x080000, CRC(0718c7e5) SHA1(c7d1f30bd2ef363cad15b6918f9980312a15809a) )
29273109   ROM_LOAD16_BYTE( "u41.old", 0x000001, 0x080000, CRC(def30539) SHA1(957ad0b06f06689ae71393572592f6b8f818603a) )
29283110
2929   ROM_REGION( 0x1000000, "gfx1", 0 )      /* Sprites (do not dispose) */
3111   ROM_REGION( 0x1000000, "sprites", 0 )      /* Sprites */
29303112   ROM_LOAD16_BYTE( "u63.bin", 0x000000, 0x400000, CRC(2f2fe92c) SHA1(9519e365248bcec8419786eabb16fe4aae299af5) )
29313113   ROM_LOAD16_BYTE( "u64.bin", 0x000001, 0x400000, CRC(491a3da4) SHA1(53549a2bd3edc7b5e73fb46e1421b156bb0c190f) )
29323114   ROM_LOAD16_BYTE( "u65.bin", 0x800000, 0x400000, CRC(06563efe) SHA1(94e72da1f542b4e0525b4b43994242816b43dbdc) )
29333115   ROM_LOAD16_BYTE( "u66.bin", 0x800001, 0x400000, CRC(7bbe4cfc) SHA1(e77d0ed7a11b5abca1df8a0eb20ac9360cf79e76) )
29343116
2935   ROM_REGION( 0x800000, "gfx2", 0 )   /* Layer 0 */
3117   ROM_REGION( 0x800000, "layer0", 0 )   /* Layer 0 */
29363118   ROM_LOAD( "u54.bin", 0x000000, 0x400000, CRC(e7ca6936) SHA1(b7f5ab67071a1d9dd3d2c1cd2304d9cdad68850c) )
29373119   ROM_LOAD( "u55.bin", 0x400000, 0x400000, CRC(f53bd94f) SHA1(d0a74fb3d36fe522ef075e5ae44a9980da8abe2f) )
29383120
2939   ROM_REGION( 0x800000, "gfx3", 0 )   /* Layer 1 */
3121   ROM_REGION( 0x800000, "layer1", 0 )   /* Layer 1 */
29403122   ROM_LOAD( "u52.bin", 0x000000, 0x400000, CRC(e7abe7b4) SHA1(e98da45497e1aaf0d6ab352ec3e43c7438ed792a) )
29413123   ROM_LOAD( "u53.bin", 0x400000, 0x400000, CRC(51a0f391) SHA1(8b7355cbad119f4e1add14e5cd5e343ec6706104) )
29423124
2943   ROM_REGION( 0x400000, "gfx4", 0 )   /* Layer 2 */
3125   ROM_REGION( 0x400000, "layer2", 0 )   /* Layer 2 */
29443126   ROM_LOAD( "u51.bin", 0x000000, 0x400000, CRC(0b9b875c) SHA1(ef05447cd8565ae24bb71db42342724622ad1e3e) )
29453127
29463128   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
29963178   ROM_LOAD16_BYTE( "prg1.127", 0x000000, 0x080000, CRC(47b904b2) SHA1(58b9b55f59cf00f70b690a0371096e86f4d723c2) )
29973179   ROM_LOAD16_BYTE( "prg2.128", 0x000001, 0x080000, CRC(469b7794) SHA1(502f855c51005a866900b19c3a0a170d9ea02392) )
29983180
2999   ROM_REGION( 0x1000000, "gfx1", 0 )  /* Sprites (do not dispose) */
3181   ROM_REGION( 0x1000000, "sprites", 0 )  /* Sprites */
30003182   ROM_LOAD( "obj1.736", 0x000000, 0x400000, CRC(f4f84e5d) SHA1(8f445dd7a5c8a996939c211e5aec5742121a6e7e) )
30013183   ROM_LOAD( "obj2.738", 0x400000, 0x400000, CRC(15c2a9ce) SHA1(631eb2968395be86ef2403733e7d4ec769a013b9) )
30023184
3003   ROM_REGION( 0x400000, "gfx2", 0 )   /* Layer 0 */
3185   ROM_REGION( 0x400000, "layer0", 0 )   /* Layer 0 */
30043186   ROM_LOAD( "bg1.989", 0x000000, 0x400000, CRC(013a693d) SHA1(2cc5be6f47c13febed942e1c3167946efedc5f9b) )
30053187
3006   ROM_REGION( 0x400000, "gfx3", 0 )   /* Layer 1 */
3188   ROM_REGION( 0x400000, "layer1", 0 )   /* Layer 1 */
30073189   ROM_LOAD( "bg2.995", 0x000000, 0x400000, CRC(783cc62f) SHA1(8b6e4212688b53be5ecc29ff2d41fd43e7d0a420) )
30083190
3009   ROM_REGION( 0x400000, "gfx4", 0 )   /* Layer 2 */
3191   ROM_REGION( 0x400000, "layer2", 0 )   /* Layer 2 */
30103192   ROM_LOAD( "bg3.998", 0x000000, 0x400000, CRC(bcd61d1c) SHA1(660a3b02a8c39e1117b00d0ad06f73221fef4ce8) )
30113193
30123194   ROM_REGION( 0xc00000, "ymz", 0 )   /* Samples */
r7640r7641
30583240   ROM_LOAD16_BYTE( "t-hero-epm1.u0127", 0x000000, 0x080000, CRC(09db7195) SHA1(6aa5aa80e3b74e405ed8f1b9b801ce4367756986) )
30593241   ROM_LOAD16_BYTE( "t-hero-epm0.u0129", 0x000001, 0x080000, CRC(2d4e3310) SHA1(7c3284a2adc7943db50933a209d037422f87f80b) )
30603242
3061   ROM_REGION( 0x1000000, "gfx1", 0 )  /* Sprites (do not dispose) */
3243   ROM_REGION( 0x1000000, "sprites", 0 )  /* Sprites */
30623244   ROM_LOAD( "t-hero-obj1.u0736", 0x000000, 0x400000, CRC(35090f7c) SHA1(035e6c12a87d9c7241eea34fc7e2170bec842acc) )
30633245   ROM_LOAD( "t-hero-obj2.u0738", 0x400000, 0x400000, CRC(71605108) SHA1(6070c26d8f22fafc81d97cacfef96ae652e355d0) )
30643246
3065   ROM_REGION( 0x400000, "gfx2", 0 )   /* Layer 0 */
3247   ROM_REGION( 0x400000, "layer0", 0 )   /* Layer 0 */
30663248   ROM_LOAD( "t-hero-bg1.u0999", 0x000000, 0x400000, CRC(47b0fb40) SHA1(a7217b3d805b4255c589821cdadd9b190cada525) )
30673249
3068   ROM_REGION( 0x400000, "gfx3", 0 )   /* Layer 1 */
3250   ROM_REGION( 0x400000, "layer1", 0 )   /* Layer 1 */
30693251   ROM_LOAD( "t-hero-bg2.u0995", 0x000000, 0x400000, CRC(b16237a1) SHA1(66aed2c5036492a17d20de90333e172a6f117851) )
30703252
3071   ROM_REGION( 0x400000, "gfx4", 0 )   /* Layer 2 */
3253   ROM_REGION( 0x400000, "layer2", 0 )   /* Layer 2 */
30723254   ROM_LOAD( "t-hero-bg3.u0998", 0x000000, 0x400000, CRC(08eb5604) SHA1(3d32966708c73198272c40e6ddc680bf4c7919eb) )
30733255
30743256   ROM_REGION( 0xc00000, "ymz", 0 )   /* Samples */
r7640r7641
30963278   ROM_LOAD16_BYTE( "gu-u0127.bin", 0x000000, 0x080000, CRC(f86b5293) SHA1(f8b1cd77cc25328d5010889850e4b86c27d9e396) )
30973279   ROM_LOAD16_BYTE( "gu-u0129.bin", 0x000001, 0x080000, CRC(6c0e3b93) SHA1(aaad6569b9a7b6f9a315062f9fedfc95851c1bc6) )
30983280
3099   ROM_REGION( 0x2000000, "gfx1", 0 )      /* Sprites (do not dispose) */
3281   ROM_REGION( 0x2000000, "sprites", 0 )      /* Sprites */
31003282   ROM_LOAD16_BYTE( "u083.bin", 0x0000000, 0x800000, CRC(adc4b9c4) SHA1(3f9fb004e19187bbfa87ddfe8cfc69740656a1bd) )
31013283   ROM_LOAD16_BYTE( "u082.bin", 0x0000001, 0x800000, CRC(3d75876c) SHA1(705b8c2dbdc31e9516f429969f87988beec796d7) )
31023284   ROM_LOAD16_BYTE( "u086.bin", 0x1000000, 0x400000, CRC(188e4f81) SHA1(626074d81782a6de0b52406331b4b8561d3e36f5) )
r7640r7641
31063288//sprite bug fix?
31073289//  ROM_FILL(                    0x1800000, 0x800000, 0xff )
31083290
3109   ROM_REGION( 0x800000, "gfx2", 0 )   /* Layer 0 */
3291   ROM_REGION( 0x800000, "layer0", 0 )   /* Layer 0 */
31103292   ROM_LOAD( "u101.bin", 0x000000, 0x800000, CRC(0369491f) SHA1(ca6b1345506f13a17c9bace01637d1f61a278644) )
31113293
3112   ROM_REGION( 0x400000, "gfx3", 0 )   /* Layer 1 */
3294   ROM_REGION( 0x400000, "layer1", 0 )   /* Layer 1 */
31133295   ROM_LOAD( "u10102.bin", 0x000000, 0x400000, CRC(e28d6855) SHA1(7001a6e298c6a1fcceb79586bf5f4bf0f30027f6) )
31143296
3115   ROM_REGION( 0x400000, "gfx4", 0 )   /* Layer 2 */
3297   ROM_REGION( 0x400000, "layer2", 0 )   /* Layer 2 */
31163298   ROM_LOAD( "u10103.bin", 0x000000, 0x400000, CRC(0fe91b8e) SHA1(8b71ebeef5e4d2b00fdaaab97776d74e1c96dc59) )
31173299
31183300   ROM_REGION( 0x400000, "ymz", 0 )   /* Samples */
r7640r7641
31593341   ROM_LOAD( "mp2u19", 0x00000, 0x08000, CRC(ff979ebe) SHA1(4cb80086cfdc69a321c7f75455cef89e20488b76) )   // FIRST AND SECOND HALF IDENTICAL
31603342   ROM_CONTINUE(       0x10000, 0x38000             )
31613343
3162   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites: * 2 , do not dispose */
3344   ROM_REGION( 0x400000 * 2, "sprites", 0 )      /* Sprites: * 2 */
31633345   ROM_LOAD( "mp9u55", 0x000000, 0x200000, CRC(258d49ec) SHA1(f39e30c82d8f680f248e1eb59d7c5acb479fa277) )
31643346   ROM_LOAD( "mp8u54", 0x200000, 0x200000, CRC(bdb4d7b8) SHA1(0dd490988aa84b0e9a21ade5fd606b03eca13f6c) )
31653347
3166   ROM_REGION( 0x80000, "gfx2", 0 )   /* Layer 0 */
3348   ROM_REGION( 0x80000, "layer0", 0 )   /* Layer 0 */
31673349   ROM_LOAD( "mp7u56", 0x00000, 0x80000, CRC(87c21c50) SHA1(fc0eea79abdd96edb4fa2c7047aaa728ef838234) )
31683350
3169   ROM_REGION( 0x80000, "gfx3", 0 )   /* Layer 1 */
3351   ROM_REGION( 0x80000, "layer1", 0 )   /* Layer 1 */
31703352   ROM_LOAD( "mp6u61", 0x00000, 0x80000, CRC(4dafb288) SHA1(4756259adfe49ba42cde25e7902655b0f0731a6c) )
31713353
3172   ROM_REGION( 0x80000, "gfx4", 0 )   /* Layer 2 */
3354   ROM_REGION( 0x80000, "layer2", 0 )   /* Layer 2 */
31733355   ROM_LOAD( "mp5u64", 0x00000, 0x80000, CRC(9b26458c) SHA1(acef62422fa3f92e6ca1eba0ee6fb914cd1ee190) )
31743356
31753357   ROM_REGION( 0xc0000, "oki", 0 )   /* Samples */
r7640r7641
32313413   ROM_REGION( 0x80000, "maincpu", 0 )      /* 68000 Code */
32323414   ROM_LOAD16_WORD_SWAP( "mp-001_ver07.u0130", 0x000000, 0x080000, CRC(86c7241f) SHA1(c9f0ab63c4fe36df1300445e9bb0d5c6a1bb733f) ) // 1xxxxxxxxxxxxxxxxxx = 0xFF
32333415
3234   ROM_REGION( 0x180000 * 2, "gfx1", 0 )      /* Sprites: * 2 , do not dispose */
3416   ROM_REGION( 0x180000 * 2, "sprites", 0 )      /* Sprites: * 2 */
32353417   ROM_LOAD( "mp-001_ver01.u1066", 0x000000, 0x100000, CRC(c5c6af7e) SHA1(13ac26fd703672a01d629be4e5efe9fb8720a4fb) )
32363418   ROM_LOAD( "mp-001_ver01.u1051", 0x100000, 0x080000, CRC(fe5e28e8) SHA1(44da1a7d813b149f9bae351bbcbd0bc2d4c70e10) )   // 1xxxxxxxxxxxxxxxxxx = 0xFF
32373419
3238   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
3420   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
32393421   ROM_LOAD( "mp-001_ver01.u1060", 0x000000, 0x100000, CRC(ec9cf9d8) SHA1(32fa7120e30c14e484de3b3a9c93efe3654d43c8) )
32403422
32413423   ROM_REGION( 0x100000, "ymz", 0 )   /* Samples */
32423424   ROM_LOAD( "mp-001_ver01.u1186", 0x000000, 0x100000, CRC(d16e7c5d) SHA1(1f825ace3ed2e23c8d3212320c4645d3d52214c7) )
32433425ROM_END
32443426
3427ROM_START( crusherm )
3428   ROM_REGION( 0x80000, "maincpu", 0 )      /* 68000 Code */
3429   ROM_LOAD16_WORD_SWAP( "mp-003ver01.u0130", 0x000000, 0x080000, CRC(a4f56e6b) SHA1(1d3af7602c48a6b6c76c376dbc8ad3823b56868a) )
32453430
3431   ROM_REGION( 0x200000 * 2, "sprites", 0 )      /* Sprites: * 2 */
3432   ROM_LOAD( "mp-003ver01.u1067", 0x000000, 0x100000, CRC(268a4921) SHA1(8bb818466616051af01680b381af53b8b6a18428) )
3433   ROM_LOAD( "mp-003ver01.u1066", 0x100000, 0x100000, CRC(79e77a6e) SHA1(9d03dd083769851d628ba6b3d77cfde9603e74f4) )
3434
3435   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
3436   ROM_LOAD( "mp-003ver01.u1060", 0x000000, 0x100000, CRC(7661893e) SHA1(d51645c96247b039214393ba5eae7357144dfd65) )
3437
3438   ROM_REGION( 0x200000, "ymz", 0 )   /* Samples */
3439   ROM_LOAD( "mp-003ver01.u1186", 0x000000, 0x100000, CRC(c3aeb745) SHA1(1bb8ab0512a9a9b0d3ce15f90b49cda431fb14eb) )
3440   ROM_LOAD( "mp-003ver01.u1187", 0x100000, 0x100000, CRC(d9312497) SHA1(a349cfdbcad96701a74f06394e87f0e0614e115d) )
3441ROM_END
3442
32463443/***************************************************************************
32473444
32483445                                Mazinger Z
r7640r7641
32683465
32693466***************************************************************************/
32703467
3271ROM_START( mazinger )
3272   ROM_REGION( 0x80000, "maincpu", 0 )      /* 68000 code */
3273   ROM_LOAD16_WORD_SWAP( "mzp-0.u24", 0x00000, 0x80000, CRC(43a4279f) SHA1(2c17eb31040bb7f1554bc1c9a968eec5e72af097) )
32743468
3275   ROM_REGION16_BE( 0x80000, "user1", 0 )      /* 68000 code (mapped at d00000) */
3276   ROM_LOAD16_WORD_SWAP( "mzp-1.924", 0x00000, 0x80000, CRC(db40acba) SHA1(797a3046b6ab33773c5c4d6bb6d045ea60c1eb45) )
32773469
3278   ROM_REGION( 0x28000, "audiocpu", 0 )      /* Z80 code */
3279   ROM_LOAD( "mzs.u21", 0x00000, 0x08000, CRC(c5b4f7ed) SHA1(01f3cd1dd4045029260544e0e1c15dd08817012e) )
3280   ROM_CONTINUE(        0x10000, 0x18000             )
3470#define ROMS_MAZINGER \
3471   ROM_REGION( 0x80000, "maincpu", 0 ) \
3472   ROM_LOAD16_WORD_SWAP( "mzp-0.u24", 0x00000, 0x80000, CRC(43a4279f) SHA1(2c17eb31040bb7f1554bc1c9a968eec5e72af097) ) \
3473   \
3474   ROM_REGION16_BE( 0x80000, "user1", 0 ) \
3475   ROM_LOAD16_WORD_SWAP( "mzp-1.924", 0x00000, 0x80000, CRC(db40acba) SHA1(797a3046b6ab33773c5c4d6bb6d045ea60c1eb45) ) \
3476   \
3477   ROM_REGION( 0x28000, "audiocpu", 0 ) \
3478   ROM_LOAD( "mzs.u21", 0x00000, 0x08000, CRC(c5b4f7ed) SHA1(01f3cd1dd4045029260544e0e1c15dd08817012e) ) \
3479   ROM_CONTINUE(        0x10000, 0x18000             ) \
3480   \
3481   ROM_REGION( 0x400000 * 2, "sprites", ROMREGION_ERASEFF ) \
3482   ROM_LOAD( "bp943a-2.u56", 0x000000, 0x200000, CRC(97e13959) SHA1(c30b1093aacebafefcae701af767dd36fc55fac7) ) \
3483   ROM_LOAD( "bp943a-3.u55", 0x200000, 0x080000, CRC(9c4957dd) SHA1(e775605a01b6cadc318855ac046dad03c4fc5bb4) ) \
3484   \
3485   ROM_REGION( 0x200000, "layer0", 0 ) \
3486   ROM_LOAD( "bp943a-1.u60", 0x000000, 0x200000, CRC(46327415) SHA1(679d26caefa975569198fac550105c370e2be00d) ) \
3487   \
3488   ROM_REGION( 0x200000, "layer1", 0 ) \
3489   ROM_LOAD( "bp943a-0.u63", 0x000000, 0x200000, CRC(c1fed98a) SHA1(c276505f80a49b129862966a19db507f97153e45) ) \
3490   \
3491   ROM_REGION( 0x0c0000, "oki", 0 ) \
3492   ROM_LOAD( "bp943a-4.u64", 0x040000, 0x080000, CRC(3fc7f29a) SHA1(feb21b918243c0a03dfa4a80cc80b86be4f62680) ) \
32813493
3282   ROM_REGION( 0x400000 * 2, "gfx1", ROMREGION_ERASEFF )      /* Sprites: * 2 , do not dispose */
3283   ROM_LOAD( "bp943a-2.u56", 0x000000, 0x200000, CRC(97e13959) SHA1(c30b1093aacebafefcae701af767dd36fc55fac7) )
3284   ROM_LOAD( "bp943a-3.u55", 0x200000, 0x080000, CRC(9c4957dd) SHA1(e775605a01b6cadc318855ac046dad03c4fc5bb4) )
3494/* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */
3495ROM_START( mazinger )
3496   ROMS_MAZINGER
32853497
3286   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
3287   ROM_LOAD( "bp943a-1.u60", 0x000000, 0x200000, CRC(46327415) SHA1(679d26caefa975569198fac550105c370e2be00d) )
3498   ROM_REGION16_BE( 0x80, "eeprom", 0 )
3499   ROM_LOAD16_WORD( "mazinger_world.nv", 0x0000, 0x0080, CRC(4f6225c6) SHA1(ed8e1c3ca9b961778cd317deb0dd8a0143eaab4f) )
3500ROM_END
32883501
3289   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
3290   ROM_LOAD( "bp943a-0.u63", 0x000000, 0x200000, CRC(c1fed98a) SHA1(c276505f80a49b129862966a19db507f97153e45) )   // FIXED BITS (xxxxxxxx00000000)
3502ROM_START( mazingerj )
3503   ROMS_MAZINGER
32913504
3292   ROM_REGION( 0x0c0000, "oki", 0 )   /* Samples */
3293   /* Leave the 0x40000 bytes addressable by the chip empty */
3294   ROM_LOAD( "bp943a-4.u64", 0x040000, 0x080000, CRC(3fc7f29a) SHA1(feb21b918243c0a03dfa4a80cc80b86be4f62680) )   // 4 x $20000
3295
32963505   ROM_REGION16_BE( 0x80, "eeprom", 0 )
3297   ROM_LOAD16_WORD( "eeprom-mazinger.bin", 0x0000, 0x0080, CRC(4f6225c6) SHA1(ed8e1c3ca9b961778cd317deb0dd8a0143eaab4f) )
3506   ROM_LOAD16_WORD( "mazinger_japan.nv", 0x0000, 0x0080, CRC(f84a2a45) SHA1(2e8ad10994bba9a3952889ed0ec3bcaca9b41d03) )
32983507ROM_END
32993508
3300
33013509/***************************************************************************
33023510
33033511             Metamoqester (World) / Oni - The Ninja Master (Japan)
r7640r7641
33543562   ROM_LOAD( "bp947a.u20",  0x00000, 0x08000, CRC(a4a36170) SHA1(ae55094518bd968ea0d04613a133c1421e412012) )
33553563   ROM_CONTINUE(            0x10000, 0x38000             )
33563564
3357   ROM_REGION( 0x800000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3565   ROM_REGION( 0x800000 * 2, "sprites", 0 )      /* Sprites */
33583566   ROM_LOAD( "bp947a.u49", 0x000000, 0x200000, CRC(09749531) SHA1(6deeed2712241611ec3202c49a66beed28698af8) )
33593567   ROM_LOAD( "bp947a.u50", 0x200000, 0x200000, CRC(19cea8b2) SHA1(87fb29458074f0e4852237e0184b8b3b44b0eb29) )
33603568   ROM_LOAD( "bp947a.u51", 0x400000, 0x200000, CRC(c19bed67) SHA1(ac664a15512c0e8c8b701833aede95f53cd46a45) )
33613569   ROM_LOAD( "bp947a.u52", 0x600000, 0x200000, CRC(70c64875) SHA1(1c20ab100ccfdf42c97a25e4deb9041b83f5ca8d) )
33623570
3363   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
3571   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
33643572   ROM_LOAD( "bp947a.u48", 0x000000, 0x100000, CRC(04ff6a3d) SHA1(7187db436f7a2ab59a3f5c6ab297b3d740e20f1d) )   // FIRST AND SECOND HALF IDENTICAL
33653573   ROM_CONTINUE(           0x000000, 0x100000             )
33663574
3367   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
3575   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
33683576   ROM_LOAD( "bp947a.u47", 0x000000, 0x100000, CRC(0de42827) SHA1(05d452ca11a31f941cb8a9b0cbb0b59c6b0cbdcb) )   // FIRST AND SECOND HALF IDENTICAL
33693577   ROM_CONTINUE(           0x000000, 0x100000             )
33703578
3371   ROM_REGION( 0x100000, "gfx4", 0 )   /* Layer 2 */
3579   ROM_REGION( 0x100000, "layer2", 0 )   /* Layer 2 */
33723580   ROM_LOAD( "bp947a.u46", 0x000000, 0x100000, CRC(0f9c906e) SHA1(03872e8be28637df66373bddb04ed91de4f9db75) )   // FIRST AND SECOND HALF IDENTICAL
33733581   ROM_CONTINUE(           0x000000, 0x100000             )
33743582
r7640r7641
33933601   ROM_LOAD( "bp947a.u20",  0x00000, 0x08000, CRC(a4a36170) SHA1(ae55094518bd968ea0d04613a133c1421e412012) )
33943602   ROM_CONTINUE(            0x10000, 0x38000             )
33953603
3396   ROM_REGION( 0x800000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3604   ROM_REGION( 0x800000 * 2, "sprites", 0 )      /* Sprites */
33973605   ROM_LOAD( "bp947a.u49", 0x000000, 0x200000, CRC(09749531) SHA1(6deeed2712241611ec3202c49a66beed28698af8) )
33983606   ROM_LOAD( "bp947a.u50", 0x200000, 0x200000, CRC(19cea8b2) SHA1(87fb29458074f0e4852237e0184b8b3b44b0eb29) )
33993607   ROM_LOAD( "bp947a.u51", 0x400000, 0x200000, CRC(c19bed67) SHA1(ac664a15512c0e8c8b701833aede95f53cd46a45) )
34003608   ROM_LOAD( "bp947a.u52", 0x600000, 0x200000, CRC(70c64875) SHA1(1c20ab100ccfdf42c97a25e4deb9041b83f5ca8d) )
34013609
3402   ROM_REGION( 0x100000, "gfx2", 0 )   /* Layer 0 */
3610   ROM_REGION( 0x100000, "layer0", 0 )   /* Layer 0 */
34033611   ROM_LOAD( "bp947a.u48", 0x000000, 0x100000, CRC(04ff6a3d) SHA1(7187db436f7a2ab59a3f5c6ab297b3d740e20f1d) )   // FIRST AND SECOND HALF IDENTICAL
34043612   ROM_CONTINUE(           0x000000, 0x100000             )
34053613
3406   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
3614   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
34073615   ROM_LOAD( "bp947a.u47", 0x000000, 0x100000, CRC(0de42827) SHA1(05d452ca11a31f941cb8a9b0cbb0b59c6b0cbdcb) )   // FIRST AND SECOND HALF IDENTICAL
34083616   ROM_CONTINUE(           0x000000, 0x100000             )
34093617
3410   ROM_REGION( 0x100000, "gfx4", 0 )   /* Layer 2 */
3618   ROM_REGION( 0x100000, "layer2", 0 )   /* Layer 2 */
34113619   ROM_LOAD( "bp947a.u46", 0x000000, 0x100000, CRC(0f9c906e) SHA1(03872e8be28637df66373bddb04ed91de4f9db75) )   // FIRST AND SECOND HALF IDENTICAL
34123620   ROM_CONTINUE(           0x000000, 0x100000             )
34133621
r7640r7641
34513659   ROM_LOAD( "g02.u3a", 0x00000, 0x0c000, CRC(ebea5e1e) SHA1(4d3af9e5f29d0c1b26563f51250039c9e8bd3735) )
34523660   ROM_CONTINUE(        0x10000, 0x14000             )
34533661
3454   ROM_REGION( 0xe00000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3662   ROM_REGION( 0xe00000 * 2, "sprites", 0 )      /* Sprites */
34553663   ROM_LOAD( "g02.u61", 0x000000, 0x200000, CRC(91e30398) SHA1(2b59a5e40bed2a988382054fe30d92808dad3348) )
34563664   ROM_LOAD( "g02.u62", 0x200000, 0x200000, CRC(d9455dd7) SHA1(afa69fe9a540cd78b8cfecf09cffa1401c01141a) )
34573665   ROM_LOAD( "g02.u63", 0x400000, 0x200000, CRC(4d20560b) SHA1(ceaee8cf0b69cc366b95ddcb689a5594d79e5114) )
r7640r7641
34603668   ROM_LOAD( "g02.u66", 0xa00000, 0x200000, CRC(becf2a36) SHA1(f8b386d0292b1dc745b7253a3df51d1aa8d5e9db) )
34613669   ROM_LOAD( "g02.u67", 0xc00000, 0x200000, CRC(52fe2b8b) SHA1(dd50aa62f7db995e28f47de9b3fb749aeeaaa5b0) )
34623670
3463   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
3671   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
34643672   ROM_LOAD( "g02.u78", 0x000000, 0x200000, CRC(1eca63d2) SHA1(538942b43301f950e3d5139461331c54dc90129d) )
34653673
3466   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
3674   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
34673675   ROM_LOAD( "g02.u81", 0x000000, 0x100000, CRC(8a3ff685) SHA1(4a59ec50ec4470453374fe10f76d3e894494b49f) )
34683676
3469   ROM_REGION( 0x100000, "gfx4", 0 )   /* Layer 2 */
3677   ROM_REGION( 0x100000, "layer2", 0 )   /* Layer 2 */
34703678   ROM_LOAD( "g02.u89", 0x000000, 0x100000, CRC(373e1f73) SHA1(ec1ae9fab37eee41be8e1bc6dad03809b62fdbce) )
34713679
3472   ROM_REGION( 0x080000, "gfx5", 0 )   /* Layer 3 */
3680   ROM_REGION( 0x080000, "layer3", 0 )   /* Layer 3 */
34733681   ROM_LOAD( "g02.82a", 0x000000, 0x080000, CRC(4b3567d6) SHA1(d3e14783b312d2bea9722a8e3c22bcec81e26166) )
34743682
34753683   ROM_REGION( 0x440000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
34973705   ROM_LOAD( "g02j.u3a", 0x00000, 0x0c000, CRC(eead01f1) SHA1(0ced6755e471e0303fe397b3d54a5c799762ebd8) )
34983706   ROM_CONTINUE(        0x10000, 0x14000             )
34993707
3500   ROM_REGION( 0xe00000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3708   ROM_REGION( 0xe00000 * 2, "sprites", 0 )      /* Sprites */
35013709   ROM_LOAD( "g02.u61", 0x000000, 0x200000, CRC(91e30398) SHA1(2b59a5e40bed2a988382054fe30d92808dad3348) )
35023710   ROM_LOAD( "g02.u62", 0x200000, 0x200000, CRC(d9455dd7) SHA1(afa69fe9a540cd78b8cfecf09cffa1401c01141a) )
35033711   ROM_LOAD( "g02.u63", 0x400000, 0x200000, CRC(4d20560b) SHA1(ceaee8cf0b69cc366b95ddcb689a5594d79e5114) )
r7640r7641
35063714   ROM_LOAD( "g02.u66", 0xa00000, 0x200000, CRC(becf2a36) SHA1(f8b386d0292b1dc745b7253a3df51d1aa8d5e9db) )
35073715   ROM_LOAD( "g02.u67", 0xc00000, 0x200000, CRC(52fe2b8b) SHA1(dd50aa62f7db995e28f47de9b3fb749aeeaaa5b0) )
35083716
3509   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
3717   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
35103718   ROM_LOAD( "g02.u78", 0x000000, 0x200000, CRC(1eca63d2) SHA1(538942b43301f950e3d5139461331c54dc90129d) )
35113719
3512   ROM_REGION( 0x100000, "gfx3", 0 )   /* Layer 1 */
3720   ROM_REGION( 0x100000, "layer1", 0 )   /* Layer 1 */
35133721   ROM_LOAD( "g02.u81", 0x000000, 0x100000, CRC(8a3ff685) SHA1(4a59ec50ec4470453374fe10f76d3e894494b49f) )
35143722
3515   ROM_REGION( 0x100000, "gfx4", 0 )   /* Layer 2 */
3723   ROM_REGION( 0x100000, "layer2", 0 )   /* Layer 2 */
35163724   ROM_LOAD( "g02.u89", 0x000000, 0x100000, CRC(373e1f73) SHA1(ec1ae9fab37eee41be8e1bc6dad03809b62fdbce) )
35173725
3518   ROM_REGION( 0x080000, "gfx5", 0 )   /* Layer 3 */
3726   ROM_REGION( 0x080000, "layer3", 0 )   /* Layer 3 */
35193727   ROM_LOAD( "g02j.82a", 0x000000, 0x080000, CRC(3be86fe1) SHA1(313bfe5fb8dc5fee4462db259738e079759f9390) )
35203728
35213729   ROM_REGION( 0x440000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
35973805   ROM_LOAD( "d19.u3", 0x00000, 0x0c000, CRC(47598459) SHA1(4e9dcfebfbd160230768965e8c6e5ed446c1aa7b) ) /* Same as sound.u3 below, but twice the size? */
35983806   ROM_CONTINUE(        0x10000, 0x34000             )
35993807
3600   ROM_REGION( 0x1000000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3808   ROM_REGION( 0x1000000 * 2, "sprites", 0 )      /* Sprites */
36013809   ROM_LOAD( "g02.u61", 0x000000, 0x200000, CRC(91e30398) SHA1(2b59a5e40bed2a988382054fe30d92808dad3348) )
36023810   ROM_LOAD( "g02.u62", 0x200000, 0x200000, CRC(d9455dd7) SHA1(afa69fe9a540cd78b8cfecf09cffa1401c01141a) )
36033811   ROM_LOAD( "g02.u63", 0x400000, 0x200000, CRC(4d20560b) SHA1(ceaee8cf0b69cc366b95ddcb689a5594d79e5114) )
r7640r7641
36073815   ROM_LOAD( "atgs.u1", 0xc00000, 0x200000, CRC(aa6f34a9) SHA1(00de85de1b413bd2c46931c13365f8556b50b634) ) /* US version's rom labeled "sp6_u67-1" */
36083816   ROM_LOAD( "atgs.u2", 0xe00000, 0x200000, CRC(553eda27) SHA1(5b9126f966f0c64b3ac7c06526064d71e4df60c5) ) /* US version's rom labeled "sp6_u67-2" */
36093817
3610   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
3818   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
36113819   ROM_LOAD( "atgs.u78", 0x000000, 0x200000, CRC(16710ecb) SHA1(6277f7f6095457df649932550b04242e5853ec5e) ) /* US version's rom labeled "bg0_u78" */
36123820
3613   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
3821   ROM_REGION( 0x200000, "layer1", 0 )   /* Layer 1 */
36143822   ROM_LOAD( "atgs.u81", 0x000000, 0x200000, CRC(cb2aca91) SHA1(869f0f2db35c45ec90b74d33d521cbb598e60a3f) ) /* US version's rom labeled "bg1_u81" */
36153823
3616   ROM_REGION( 0x200000, "gfx4", 0 )   /* Layer 2 */
3824   ROM_REGION( 0x200000, "layer2", 0 )   /* Layer 2 */
36173825   ROM_LOAD( "atgs.u89", 0x000000, 0x200000, CRC(65f45a0f) SHA1(b7f4b56308dcdc144100d0a92d91255459a320a4) ) /* US version's rom labeled "bg2_u89" */
36183826
3619   ROM_REGION( 0x080000, "gfx5", 0 )   /* Layer 3 */
3827   ROM_REGION( 0x080000, "layer3", 0 )   /* Layer 3 */
36203828   ROM_LOAD( "text.u82", 0x000000, 0x080000, CRC(f57333ea) SHA1(409d8005ffcf91943e4a743b2434ce425f5bdc36) ) /* US version's rom labeled "d20" */
36213829
36223830   ROM_REGION( 0x440000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
36453853   ROM_LOAD( "sound.u3", 0x00000, 0x0c000, CRC(36f71520) SHA1(11d0a059ddba3e1aa4c54ccdde7b3f5c7bde482f) )
36463854   ROM_CONTINUE(        0x10000, 0x14000             )
36473855
3648   ROM_REGION( 0x1000000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3856   ROM_REGION( 0x1000000 * 2, "sprites", 0 )      /* Sprites */
36493857   ROM_LOAD( "g02.u61", 0x000000, 0x200000, CRC(91e30398) SHA1(2b59a5e40bed2a988382054fe30d92808dad3348) )
36503858   ROM_LOAD( "g02.u62", 0x200000, 0x200000, CRC(d9455dd7) SHA1(afa69fe9a540cd78b8cfecf09cffa1401c01141a) )
36513859   ROM_LOAD( "g02.u63", 0x400000, 0x200000, CRC(4d20560b) SHA1(ceaee8cf0b69cc366b95ddcb689a5594d79e5114) )
r7640r7641
36553863   ROM_LOAD( "atgs.u1", 0xc00000, 0x200000, CRC(aa6f34a9) SHA1(00de85de1b413bd2c46931c13365f8556b50b634) ) /* US version's rom labeled "sp6_u67-1" */
36563864   ROM_LOAD( "atgs.u2", 0xe00000, 0x200000, CRC(553eda27) SHA1(5b9126f966f0c64b3ac7c06526064d71e4df60c5) ) /* US version's rom labeled "sp6_u67-2" */
36573865
3658   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
3866   ROM_REGION( 0x200000, "layer0", 0 )   /* Layer 0 */
36593867   ROM_LOAD( "atgs.u78", 0x000000, 0x200000, CRC(16710ecb) SHA1(6277f7f6095457df649932550b04242e5853ec5e) ) /* US version's rom labeled "bg0_u78" */
36603868
3661   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
3869   ROM_REGION( 0x200000, "layer1", 0 )   /* Layer 1 */
36623870   ROM_LOAD( "atgs.u81", 0x000000, 0x200000, CRC(cb2aca91) SHA1(869f0f2db35c45ec90b74d33d521cbb598e60a3f) ) /* US version's rom labeled "bg1_u81" */
36633871
3664   ROM_REGION( 0x200000, "gfx4", 0 )   /* Layer 2 */
3872   ROM_REGION( 0x200000, "layer2", 0 )   /* Layer 2 */
36653873   ROM_LOAD( "atgs.u89", 0x000000, 0x200000, CRC(65f45a0f) SHA1(b7f4b56308dcdc144100d0a92d91255459a320a4) ) /* US version's rom labeled "bg2_u89" */
36663874
3667   ROM_REGION( 0x080000, "gfx5", 0 )   /* Layer 3 */
3875   ROM_REGION( 0x080000, "layer3", 0 )   /* Layer 3 */
36683876   ROM_LOAD( "text.u82", 0x000000, 0x080000, CRC(f57333ea) SHA1(409d8005ffcf91943e4a743b2434ce425f5bdc36) ) /* US version's rom labeled "d20" */
36693877
36703878   ROM_REGION( 0x440000, "oki1", 0 )   /* OKIM6295 #1 Samples */
r7640r7641
37273935
37283936***************************************************************************/
37293937
3938
3939
3940#define ROMS_SAILORMN \
3941   ROM_REGION( 0x400000, "maincpu", 0 ) \
3942   ROM_LOAD16_WORD_SWAP( "bpsm945a.u45", 0x000000, 0x080000, CRC(898c9515) SHA1(0fe8d7f13f5cfe2f6e79a0a21b2e8e7e70e65c4b) ) \
3943   ROM_LOAD16_WORD_SWAP( "bpsm.u46",     0x200000, 0x200000, CRC(32084e80) SHA1(0ac503190d95009620b5ad7e7e0e63324f6fa4eb) ) \
3944   \
3945   ROM_REGION( 0x88000, "audiocpu", 0 ) \
3946   ROM_LOAD( "bpsm945a.u9",  0x00000, 0x08000, CRC(438de548) SHA1(81a0ca1cd662e2017aa980da162d39cfd0a19f14) ) \
3947   ROM_CONTINUE(             0x10000, 0x78000             ) \
3948   \
3949   ROM_REGION( 0x400000 * 2, "sprites", 0 ) \
3950   ROM_LOAD( "bpsm.u76", 0x000000, 0x200000, CRC(a243a5ba) SHA1(3a32d685e53e0b75977f7acb187cf414a50c7f8b) ) \
3951   ROM_LOAD( "bpsm.u77", 0x200000, 0x200000, CRC(5179a4ac) SHA1(ceb8d3d889aae885debb2c9cf2263f60be3f1212) ) \
3952   \
3953   ROM_REGION( 0x200000, "layer0", 0 ) \
3954   ROM_LOAD( "bpsm.u53", 0x000000, 0x200000, CRC(b9b15f83) SHA1(8c574c97d38fb9e2889648c8d677b171e80a4229) ) \
3955   \
3956   ROM_REGION( 0x200000, "layer1", 0 ) \
3957   ROM_LOAD( "bpsm.u54", 0x000000, 0x200000, CRC(8f00679d) SHA1(4ea412f8ecdb9fd46f2d1378809919d1a62fcc2b) ) \
3958   \
3959   ROM_REGION( (5*0x200000)*2, "layer2", 0 ) \
3960   \
3961   ROM_LOAD( "bpsm.u57", 0x000000, 0x200000, CRC(86be7b63) SHA1(6b7d3d41fb1e4045c765b3cc98304464d91e6e3d) ) \
3962   ROM_LOAD( "bpsm.u58", 0x200000, 0x200000, CRC(e0bba83b) SHA1(9e1434814efd9321b2e5210b995d2fe66cca37dd) ) \
3963   ROM_LOAD( "bpsm.u62", 0x400000, 0x200000, CRC(a1e3bfac) SHA1(4528887d57e519df8dd60b2392db4c175c57b239) ) \
3964   ROM_LOAD( "bpsm.u61", 0x600000, 0x200000, CRC(6a014b52) SHA1(107c687479b59c455fc514cd61d290853c95ad9a) ) \
3965   ROM_LOAD( "bpsm.u60", 0x800000, 0x200000, CRC(992468c0) SHA1(3c66cc08313a9a326badc44f53a98cdfe0643da4) ) \
3966   \
3967   ROM_LOAD( "bpsm.u65", 0xa00000, 0x200000, CRC(f60fb7b5) SHA1(72cb8908cd687a330e14657664cd35037a52c39e) ) \
3968   ROM_LOAD( "bpsm.u64", 0xc00000, 0x200000, CRC(6559d31c) SHA1(bf688123a4beff625652cc1844bf0dc192f5c90f) ) \
3969   ROM_LOAD( "bpsm.u63", 0xe00000, 0x100000, CRC(d57a56b4) SHA1(e039b336887b66eba4e0630a3cb04cbd8fe14073) ) \
3970   ROM_CONTINUE(         0xe00000, 0x100000             ) \
3971   \
3972   ROM_REGION( 0x240000, "oki1", 0 ) \
3973   ROM_LOAD( "bpsm.u48", 0x040000, 0x200000, CRC(498e4ed1) SHA1(28d45a41702d9e5af4e214c1800b2e513ec84d51) ) \
3974   \
3975   ROM_REGION( 0x240000, "oki2", 0 ) \
3976   ROM_LOAD( "bpsm.u47", 0x040000, 0x080000, CRC(0f2901b9) SHA1(ebd3e9e39e8d2bc91688dac19b99548a28b4733c) ) \
3977   ROM_RELOAD(           0x0c0000, 0x080000             ) \
3978   ROM_RELOAD(           0x140000, 0x080000             ) \
3979   ROM_RELOAD(           0x1c0000, 0x080000             ) \
3980
3981/* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */
37303982ROM_START( sailormn )
3731   ROM_REGION( 0x400000, "maincpu", 0 )      /* 68000 code */
3732   ROM_LOAD16_WORD_SWAP( "bpsm945a.u45", 0x000000, 0x080000, CRC(898c9515) SHA1(0fe8d7f13f5cfe2f6e79a0a21b2e8e7e70e65c4b) )
3733   ROM_LOAD16_WORD_SWAP( "bpsm.u46",     0x200000, 0x200000, CRC(32084e80) SHA1(0ac503190d95009620b5ad7e7e0e63324f6fa4eb) )
3983   ROMS_SAILORMN
37343984
3735   ROM_REGION( 0x88000, "audiocpu", 0 )   /* Z80 code */
3736   ROM_LOAD( "bpsm945a.u9",  0x00000, 0x08000, CRC(438de548) SHA1(81a0ca1cd662e2017aa980da162d39cfd0a19f14) )
3737   ROM_CONTINUE(             0x10000, 0x78000             )
3985   ROM_REGION16_BE( 0x80, "eeprom", 0 )
3986   ROM_LOAD16_WORD( "sailormn_europe.nv", 0x0000, 0x0080, CRC(59a7dc50) SHA1(6b116bdfbde42192b01678cb0b9bab0f2e56fd28) )
3987ROM_END
37383988
3739   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3740   ROM_LOAD( "bpsm.u76", 0x000000, 0x200000, CRC(a243a5ba) SHA1(3a32d685e53e0b75977f7acb187cf414a50c7f8b) )
3741   ROM_LOAD( "bpsm.u77", 0x200000, 0x200000, CRC(5179a4ac) SHA1(ceb8d3d889aae885debb2c9cf2263f60be3f1212) )
3989ROM_START( sailormnu )
3990   ROMS_SAILORMN
37423991
3743   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
3744   ROM_LOAD( "bpsm.u53", 0x000000, 0x200000, CRC(b9b15f83) SHA1(8c574c97d38fb9e2889648c8d677b171e80a4229) )
3992   ROM_REGION16_BE( 0x80, "eeprom", 0 )
3993   ROM_LOAD16_WORD( "sailormn_usa.nv", 0x0000, 0x0080, CRC(3915abe3) SHA1(1b8d3b8c65cf2298939c27607ec52630c017c7ea) )
3994ROM_END
37453995
3746   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
3747   ROM_LOAD( "bpsm.u54", 0x000000, 0x200000, CRC(8f00679d) SHA1(4ea412f8ecdb9fd46f2d1378809919d1a62fcc2b) )
3996ROM_START( sailormnj )
3997   ROMS_SAILORMN
37483998
3749   ROM_REGION( (5*0x200000)*2, "gfx4", 0 )   /* Layer 2 */
3750   /* 4 bit part */
3751   ROM_LOAD( "bpsm.u57", 0x000000, 0x200000, CRC(86be7b63) SHA1(6b7d3d41fb1e4045c765b3cc98304464d91e6e3d) )
3752   ROM_LOAD( "bpsm.u58", 0x200000, 0x200000, CRC(e0bba83b) SHA1(9e1434814efd9321b2e5210b995d2fe66cca37dd) )
3753   ROM_LOAD( "bpsm.u62", 0x400000, 0x200000, CRC(a1e3bfac) SHA1(4528887d57e519df8dd60b2392db4c175c57b239) )
3754   ROM_LOAD( "bpsm.u61", 0x600000, 0x200000, CRC(6a014b52) SHA1(107c687479b59c455fc514cd61d290853c95ad9a) )
3755   ROM_LOAD( "bpsm.u60", 0x800000, 0x200000, CRC(992468c0) SHA1(3c66cc08313a9a326badc44f53a98cdfe0643da4) )
3756   /* 2 bit part */
3757   ROM_LOAD( "bpsm.u65", 0xa00000, 0x200000, CRC(f60fb7b5) SHA1(72cb8908cd687a330e14657664cd35037a52c39e) )
3758   ROM_LOAD( "bpsm.u64", 0xc00000, 0x200000, CRC(6559d31c) SHA1(bf688123a4beff625652cc1844bf0dc192f5c90f) )
3759   ROM_LOAD( "bpsm.u63", 0xe00000, 0x100000, CRC(d57a56b4) SHA1(e039b336887b66eba4e0630a3cb04cbd8fe14073) )   // FIRST AND SECOND HALF IDENTICAL
3760   ROM_CONTINUE(         0xe00000, 0x100000             )
3999   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4000   ROM_LOAD16_WORD( "sailormn_japan.nv", 0x0000, 0x0080, CRC(ea03c30a) SHA1(2afc71f932674e34fc4491db0e2027e0371569fc) )
4001ROM_END
37614002
3762   ROM_REGION( 0x240000, "oki1", 0 )   /* OKIM6295 #0 Samples */
3763   /* Leave the 0x40000 bytes addressable by the chip empty */
3764   ROM_LOAD( "bpsm.u48", 0x040000, 0x200000, CRC(498e4ed1) SHA1(28d45a41702d9e5af4e214c1800b2e513ec84d51) )   // 16 x $20000
4003ROM_START( sailormnk )
4004   ROMS_SAILORMN
37654005
3766   ROM_REGION( 0x240000, "oki2", 0 )   /* OKIM6295 #1 Samples */
3767   /* Leave the 0x40000 bytes addressable by the chip empty */
3768   ROM_LOAD( "bpsm.u47", 0x040000, 0x080000, CRC(0f2901b9) SHA1(ebd3e9e39e8d2bc91688dac19b99548a28b4733c) )   // 4 x $20000
3769   ROM_RELOAD(           0x0c0000, 0x080000             )
3770   ROM_RELOAD(           0x140000, 0x080000             )
3771   ROM_RELOAD(           0x1c0000, 0x080000             )
4006   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4007   ROM_LOAD16_WORD( "sailormn_korea.nv", 0x0000, 0x0080, CRC(0e7de398) SHA1(b495bf43d8596a0dc9843c74fc04fd21499bd115) )
4008ROM_END
37724009
4010ROM_START( sailormnt )
4011   ROMS_SAILORMN
4012
37734013   ROM_REGION16_BE( 0x80, "eeprom", 0 )
3774   ROM_LOAD16_WORD( "eeprom-sailormn.bin", 0x0000, 0x0080, CRC(59a7dc50) SHA1(6b116bdfbde42192b01678cb0b9bab0f2e56fd28) )
4014   ROM_LOAD16_WORD( "sailormn_taiwan.nv", 0x0000, 0x0080, CRC(6c7e8c2a) SHA1(68ef4e6593e4c12e6488a20dcc6dda920b01de67) )
37754015ROM_END
37764016
4017ROM_START( sailormnh )
4018   ROMS_SAILORMN
4019
4020   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4021   ROM_LOAD16_WORD( "sailormn_hongkong.nv", 0x0000, 0x0080, CRC(4d24c874) SHA1(93b87ef18cff98e4f6a60234692e7a9a9c8e7552) )
4022ROM_END
4023
4024
4025#define ROMS_SAILORMNO \
4026   ROM_REGION( 0x400000, "maincpu", 0 ) \
4027   ROM_LOAD16_WORD_SWAP( "smprg.u45",    0x000000, 0x080000, CRC(234f1152) SHA1(8fc6d4a8995d550862d328011d3357c09334f0fa) ) \
4028   ROM_LOAD16_WORD_SWAP( "bpsm.u46",     0x200000, 0x200000, CRC(32084e80) SHA1(0ac503190d95009620b5ad7e7e0e63324f6fa4eb) ) \
4029   \
4030   ROM_REGION( 0x88000, "audiocpu", 0 ) \
4031   ROM_LOAD( "bpsm945a.u9",  0x00000, 0x08000, CRC(438de548) SHA1(81a0ca1cd662e2017aa980da162d39cfd0a19f14) ) \
4032   ROM_CONTINUE(             0x10000, 0x78000             ) \
4033   \
4034   ROM_REGION( 0x400000 * 2, "sprites", 0 ) \
4035   ROM_LOAD( "bpsm.u76", 0x000000, 0x200000, CRC(a243a5ba) SHA1(3a32d685e53e0b75977f7acb187cf414a50c7f8b) ) \
4036   ROM_LOAD( "bpsm.u77", 0x200000, 0x200000, CRC(5179a4ac) SHA1(ceb8d3d889aae885debb2c9cf2263f60be3f1212) ) \
4037   \
4038   ROM_REGION( 0x200000, "layer0", 0 ) \
4039   ROM_LOAD( "bpsm.u53", 0x000000, 0x200000, CRC(b9b15f83) SHA1(8c574c97d38fb9e2889648c8d677b171e80a4229) ) \
4040   \
4041   ROM_REGION( 0x200000, "layer1", 0 ) \
4042   ROM_LOAD( "bpsm.u54", 0x000000, 0x200000, CRC(8f00679d) SHA1(4ea412f8ecdb9fd46f2d1378809919d1a62fcc2b) ) \
4043   \
4044   ROM_REGION( (5*0x200000)*2, "layer2", 0 ) \
4045   \
4046   ROM_LOAD( "bpsm.u57", 0x000000, 0x200000, CRC(86be7b63) SHA1(6b7d3d41fb1e4045c765b3cc98304464d91e6e3d) ) \
4047   ROM_LOAD( "bpsm.u58", 0x200000, 0x200000, CRC(e0bba83b) SHA1(9e1434814efd9321b2e5210b995d2fe66cca37dd) ) \
4048   ROM_LOAD( "bpsm.u62", 0x400000, 0x200000, CRC(a1e3bfac) SHA1(4528887d57e519df8dd60b2392db4c175c57b239) ) \
4049   ROM_LOAD( "bpsm.u61", 0x600000, 0x200000, CRC(6a014b52) SHA1(107c687479b59c455fc514cd61d290853c95ad9a) ) \
4050   ROM_LOAD( "bpsm.u60", 0x800000, 0x200000, CRC(992468c0) SHA1(3c66cc08313a9a326badc44f53a98cdfe0643da4) ) \
4051   \
4052   ROM_LOAD( "bpsm.u65", 0xa00000, 0x200000, CRC(f60fb7b5) SHA1(72cb8908cd687a330e14657664cd35037a52c39e) ) \
4053   ROM_LOAD( "bpsm.u64", 0xc00000, 0x200000, CRC(6559d31c) SHA1(bf688123a4beff625652cc1844bf0dc192f5c90f) ) \
4054   ROM_LOAD( "bpsm.u63", 0xe00000, 0x100000, CRC(d57a56b4) SHA1(e039b336887b66eba4e0630a3cb04cbd8fe14073) ) \
4055   ROM_CONTINUE(         0xe00000, 0x100000             ) \
4056   \
4057   ROM_REGION( 0x240000, "oki1", 0 ) \
4058   ROM_LOAD( "bpsm.u48", 0x040000, 0x200000, CRC(498e4ed1) SHA1(28d45a41702d9e5af4e214c1800b2e513ec84d51) ) \
4059   \
4060   ROM_REGION( 0x240000, "oki2", 0 ) \
4061   ROM_LOAD( "bpsm.u47", 0x040000, 0x080000, CRC(0f2901b9) SHA1(ebd3e9e39e8d2bc91688dac19b99548a28b4733c) ) \
4062   ROM_RELOAD(           0x0c0000, 0x080000             ) \
4063   ROM_RELOAD(           0x140000, 0x080000             ) \
4064   ROM_RELOAD(           0x1c0000, 0x080000             ) \
4065
4066/* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */
37774067ROM_START( sailormno )
3778   ROM_REGION( 0x400000, "maincpu", 0 )      /* 68000 code */
3779   ROM_LOAD16_WORD_SWAP( "smprg.u45",    0x000000, 0x080000, CRC(234f1152) SHA1(8fc6d4a8995d550862d328011d3357c09334f0fa) )
3780   ROM_LOAD16_WORD_SWAP( "bpsm.u46",     0x200000, 0x200000, CRC(32084e80) SHA1(0ac503190d95009620b5ad7e7e0e63324f6fa4eb) )
4068   ROMS_SAILORMNO
37814069
3782   ROM_REGION( 0x88000, "audiocpu", 0 )   /* Z80 code */
3783   ROM_LOAD( "bpsm945a.u9",  0x00000, 0x08000, CRC(438de548) SHA1(81a0ca1cd662e2017aa980da162d39cfd0a19f14) )
3784   ROM_CONTINUE(             0x10000, 0x78000             )
4070   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4071   ROM_LOAD16_WORD( "sailormn_europe.nv", 0x0000, 0x0080, CRC(59a7dc50) SHA1(6b116bdfbde42192b01678cb0b9bab0f2e56fd28) )
4072ROM_END
37854073
3786   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites (do not dispose) */
3787   ROM_LOAD( "bpsm.u76", 0x000000, 0x200000, CRC(a243a5ba) SHA1(3a32d685e53e0b75977f7acb187cf414a50c7f8b) )
3788   ROM_LOAD( "bpsm.u77", 0x200000, 0x200000, CRC(5179a4ac) SHA1(ceb8d3d889aae885debb2c9cf2263f60be3f1212) )
4074ROM_START( sailormnou )
4075   ROMS_SAILORMNO
37894076
3790   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 */
3791   ROM_LOAD( "bpsm.u53", 0x000000, 0x200000, CRC(b9b15f83) SHA1(8c574c97d38fb9e2889648c8d677b171e80a4229) )
4077   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4078   ROM_LOAD16_WORD( "sailormn_usa.nv", 0x0000, 0x0080, CRC(3915abe3) SHA1(1b8d3b8c65cf2298939c27607ec52630c017c7ea) )
4079ROM_END
37924080
3793   ROM_REGION( 0x200000, "gfx3", 0 )   /* Layer 1 */
3794   ROM_LOAD( "bpsm.u54", 0x000000, 0x200000, CRC(8f00679d) SHA1(4ea412f8ecdb9fd46f2d1378809919d1a62fcc2b) )
4081ROM_START( sailormnoj )
4082   ROMS_SAILORMNO
37954083
3796   ROM_REGION( (5*0x200000)*2, "gfx4", 0 )   /* Layer 2 */
3797   /* 4 bit part */
3798   ROM_LOAD( "bpsm.u57", 0x000000, 0x200000, CRC(86be7b63) SHA1(6b7d3d41fb1e4045c765b3cc98304464d91e6e3d) )
3799   ROM_LOAD( "bpsm.u58", 0x200000, 0x200000, CRC(e0bba83b) SHA1(9e1434814efd9321b2e5210b995d2fe66cca37dd) )
3800   ROM_LOAD( "bpsm.u62", 0x400000, 0x200000, CRC(a1e3bfac) SHA1(4528887d57e519df8dd60b2392db4c175c57b239) )
3801   ROM_LOAD( "bpsm.u61", 0x600000, 0x200000, CRC(6a014b52) SHA1(107c687479b59c455fc514cd61d290853c95ad9a) )
3802   ROM_LOAD( "bpsm.u60", 0x800000, 0x200000, CRC(992468c0) SHA1(3c66cc08313a9a326badc44f53a98cdfe0643da4) )
3803   /* 2 bit part */
3804   ROM_LOAD( "bpsm.u65", 0xa00000, 0x200000, CRC(f60fb7b5) SHA1(72cb8908cd687a330e14657664cd35037a52c39e) )
3805   ROM_LOAD( "bpsm.u64", 0xc00000, 0x200000, CRC(6559d31c) SHA1(bf688123a4beff625652cc1844bf0dc192f5c90f) )
3806   ROM_LOAD( "bpsm.u63", 0xe00000, 0x100000, CRC(d57a56b4) SHA1(e039b336887b66eba4e0630a3cb04cbd8fe14073) )   // FIRST AND SECOND HALF IDENTICAL
3807   ROM_CONTINUE(         0xe00000, 0x100000             )
4084   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4085   ROM_LOAD16_WORD( "sailormn_japan.nv", 0x0000, 0x0080, CRC(ea03c30a) SHA1(2afc71f932674e34fc4491db0e2027e0371569fc) )
4086ROM_END
38084087
3809   ROM_REGION( 0x240000, "oki1", 0 )   /* OKIM6295 #0 Samples */
3810   /* Leave the 0x40000 bytes addressable by the chip empty */
3811   ROM_LOAD( "bpsm.u48", 0x040000, 0x200000, CRC(498e4ed1) SHA1(28d45a41702d9e5af4e214c1800b2e513ec84d51) )   // 16 x $20000
4088ROM_START( sailormnok )
4089   ROMS_SAILORMNO
38124090
3813   ROM_REGION( 0x240000, "oki2", 0 )   /* OKIM6295 #1 Samples */
3814   /* Leave the 0x40000 bytes addressable by the chip empty */
3815   ROM_LOAD( "bpsm.u47", 0x040000, 0x080000, CRC(0f2901b9) SHA1(ebd3e9e39e8d2bc91688dac19b99548a28b4733c) )   // 4 x $20000
3816   ROM_RELOAD(           0x0c0000, 0x080000             )
3817   ROM_RELOAD(           0x140000, 0x080000             )
3818   ROM_RELOAD(           0x1c0000, 0x080000             )
4091   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4092   ROM_LOAD16_WORD( "sailormn_korea.nv", 0x0000, 0x0080, CRC(0e7de398) SHA1(b495bf43d8596a0dc9843c74fc04fd21499bd115) )
4093ROM_END
38194094
4095ROM_START( sailormnot )
4096   ROMS_SAILORMNO
4097
38204098   ROM_REGION16_BE( 0x80, "eeprom", 0 )
3821   ROM_LOAD16_WORD( "eeprom-sailormn.bin", 0x0000, 0x0080, CRC(59a7dc50) SHA1(6b116bdfbde42192b01678cb0b9bab0f2e56fd28) )
4099   ROM_LOAD16_WORD( "sailormn_taiwan.nv", 0x0000, 0x0080, CRC(6c7e8c2a) SHA1(68ef4e6593e4c12e6488a20dcc6dda920b01de67) )
38224100ROM_END
38234101
4102ROM_START( sailormnoh )
4103   ROMS_SAILORMNO
38244104
4105   ROM_REGION16_BE( 0x80, "eeprom", 0 )
4106   ROM_LOAD16_WORD( "sailormn_hongkong.nv", 0x0000, 0x0080, CRC(4d24c874) SHA1(93b87ef18cff98e4f6a60234692e7a9a9c8e7552) )
4107ROM_END
4108
4109
38254110/***************************************************************************
38264111
4112  Tobikose! Jumpman by Namco, 1999
4113  PCB TJ0476
4114
4115  TMP 68HC000P-16
4116
4117  013 9934WX002
4118  038 9919WX007
4119
4120  OKI M6295
4121
4122  Battery
4123  EEPROM?
4124
4125  28MHz XTAL
4126
4127***************************************************************************/
4128
4129ROM_START( tjumpman )
4130   ROM_REGION( 0x080000, "maincpu", 0 )      /* 68000 code */
4131   ROM_LOAD16_WORD_SWAP( "tj1_mpr-0c.u41", 0x00000, 0x80000, CRC(de3030b8) SHA1(5f2165ea039c34cab605ebddc0b61eadc47b1532) )
4132
4133   ROM_REGION( 0x100000 * 2, "sprites", 0 )      /* Sprites */
4134   ROM_LOAD16_BYTE( "tj1_obj-0a.u52", 0x00000, 0x80000, CRC(b42cf8e8) SHA1(9ed7fb3574ed163a81f34a0d8cfa7a4661439932) )
4135   ROM_LOAD16_BYTE( "tj1_obj-1a.u53", 0x00001, 0x80000, CRC(5f0124d7) SHA1(4d9cfa464159998c176a178c668273d128dedff8) )
4136
4137   ROM_REGION( 0x80000, "layer0", 0 )   /* Layer 0 */
4138   ROM_LOAD( "tj1_cha-0a.u60", 0x00000, 0x40000, CRC(8aa08a38) SHA1(92b4df72fb8a833bb686ea478811243c5b868470) )
4139   ROM_LOAD( "tj1_cha-1a.u61", 0x40000, 0x40000, CRC(50072c82) SHA1(f8823e5a865afb8824cafd3b6483e2b6250ee77f) )
4140
4141   ROM_REGION( 0x40000, "oki1", 0 )   /* OKIM6295 #1 Samples */
4142   ROM_LOAD( "tj1_voi-0a.u27", 0x00000, 0x40000, CRC(b5693aae) SHA1(8887ae98030cb5d184e3d57d2b4e48bf1e76a232) )
4143
4144    ROM_REGION( 0x0002, "plds", 0 )
4145    ROM_LOAD( "tj1_gal.uxx", 0x0000, 0x0001, NO_DUMP )   // GAL16V8D-15LP
4146    ROM_LOAD( "tj1_gal.uyy", 0x0000, 0x0001, NO_DUMP )   // GAL16V8D-15LP
4147ROM_END
4148
4149
4150/***************************************************************************
4151
38274152                             Puzzle Uo Poko
38284153Board: CV02
38294154OSC:    28.0, 16.0, 16.9 MHz
r7640r7641
38354160   ROM_LOAD16_BYTE( "u26.int", 0x000000, 0x080000, CRC(b445c9ac) SHA1(4dda1c6e19de629ea4d9061560c32a9f0deabd53) )
38364161   ROM_LOAD16_BYTE( "u25.int", 0x000001, 0x080000, CRC(a1258482) SHA1(7f4adc4a6d069032aaf3d93eb60fde16b59483f8) )
38374162
3838   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites: * 2 , do not dispose */
4163   ROM_REGION( 0x400000 * 2, "sprites", 0 )      /* Sprites: * 2 */
38394164   ROM_LOAD( "u33.bin", 0x000000, 0x400000, CRC(5d142ad2) SHA1(f26abcf7a625a322b83df44fbd6e852bfb03663c) )
38404165
3841   ROM_REGION( 0x400000, "gfx2", 0 )   /* Layer 0 */
4166   ROM_REGION( 0x400000, "layer0", 0 )   /* Layer 0 */
38424167   ROM_LOAD( "u49.bin", 0x000000, 0x400000, CRC(12fb11bb) SHA1(953df1b16b5c9a6c3eb2fdebec4669a879270e73) )
38434168
38444169   ROM_REGION( 0x200000, "ymz", 0 )   /* Samples */
r7640r7641
38534178   ROM_LOAD16_BYTE( "u26.bin", 0x000000, 0x080000, CRC(e7eec050) SHA1(cf3a77741029f96dbbec5ca7217a1723e4233cff) )
38544179   ROM_LOAD16_BYTE( "u25.bin", 0x000001, 0x080000, CRC(68cb6211) SHA1(a6db0bc2e3e54b6992a44b7d52395917e66db49b) )
38554180
3856   ROM_REGION( 0x400000 * 2, "gfx1", 0 )      /* Sprites: * 2 , do not dispose */
4181   ROM_REGION( 0x400000 * 2, "sprites", 0 )      /* Sprites: * 2 */
38574182   ROM_LOAD( "u33.bin", 0x000000, 0x400000, CRC(5d142ad2) SHA1(f26abcf7a625a322b83df44fbd6e852bfb03663c) )
38584183
3859   ROM_REGION( 0x400000, "gfx2", 0 )   /* Layer 0 */
4184   ROM_REGION( 0x400000, "layer0", 0 )   /* Layer 0 */
38604185   ROM_LOAD( "u49.bin", 0x000000, 0x400000, CRC(12fb11bb) SHA1(953df1b16b5c9a6c3eb2fdebec4669a879270e73) )
38614186
38624187   ROM_REGION( 0x200000, "ymz", 0 )   /* Samples */
r7640r7641
39034228static void init_cave(running_machine *machine)
39044229{
39054230   cave_state *state = (cave_state *)machine->driver_data;
3906   state->region_byte = -1;
39074231
39084232   state->spritetype[0] = 0;   // Normal sprites
39094233   state->kludge = 0;
r7640r7641
39154239
39164240static DRIVER_INIT( agallet )
39174241{
3918   cave_state *state = (cave_state *)machine->driver_data;
39194242   UINT8 *ROM = memory_region(machine, "audiocpu");
39204243   init_cave(machine);
39214244
39224245   memory_configure_bank(machine, "bank1", 0, 0x02, &ROM[0x00000], 0x4000);
39234246   memory_configure_bank(machine, "bank1", 2, 0x1e, &ROM[0x10000], 0x4000);
39244247
3925   sailormn_unpack_tiles(machine, "gfx4");
4248   sailormn_unpack_tiles(machine, "layer2");
39264249
3927   state->region_byte = 0x1f;
3928
39294250   unpack_sprites(machine);
3930
3931   //  Speed Hack
3932   memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xb80000, 0xb80001, 0, 0, agallet_irq_cause_r);
39334251}
39344252
39354253static DRIVER_INIT( dfeveron )
r7640r7641
39374255   cave_state *state = (cave_state *)machine->driver_data;
39384256   init_cave(machine);
39394257
3940   state->region_byte = -1;
3941
39424258   unpack_sprites(machine);
39434259   state->kludge = 2;
39444260}
r7640r7641
39484264   cave_state *state = (cave_state *)machine->driver_data;
39494265   init_cave(machine);
39504266
3951   state->region_byte = -1;
3952
39534267   unpack_sprites(machine);
39544268   state->kludge = 2;
39554269}
r7640r7641
39594273   cave_state *state = (cave_state *)machine->driver_data;
39604274   init_cave(machine);
39614275
3962   state->region_byte = -1;
3963
39644276   ddonpach_unpack_sprites(machine);
39654277   state->spritetype[0] = 1;   // "different" sprites (no zooming?)
39664278   state->time_vblank_irq = 90;
r7640r7641
39714283   cave_state *state = (cave_state *)machine->driver_data;
39724284   init_cave(machine);
39734285
3974   state->region_byte = -1;
3975
39764286   ddonpach_unpack_sprites(machine);
39774287   state->spritetype[0] = 1;   // "different" sprites (no zooming?)
39784288   state->time_vblank_irq = 90;
r7640r7641
39844294   cave_state *state = (cave_state *)machine->driver_data;
39854295   init_cave(machine);
39864296
3987   state->region_byte = -1;
3988
39894297   esprade_unpack_sprites(machine);
39904298   state->time_vblank_irq = 2000;   /**/
39914299
r7640r7641
40144322   cave_state *state = (cave_state *)machine->driver_data;
40154323   init_cave(machine);
40164324
4017   state->region_byte = -1;
4018
40194325   esprade_unpack_sprites(machine);
40204326   state->time_vblank_irq = 2000;   /**/
40214327}
r7640r7641
40304336   memory_configure_bank(machine, "bank2", 0, 0x2, &ROM[0x00000], 0x4000);
40314337   memory_configure_bank(machine, "bank2", 2, 0xe, &ROM[0x10000], 0x4000);
40324338
4033   state->region_byte = -1;
4034
40354339   unpack_sprites(machine);
40364340   state->spritetype[0] = 2;   // Normal sprites with different position handling
40374341   state->time_vblank_irq = 2000;   /**/
r7640r7641
40424346   cave_state *state = (cave_state *)machine->driver_data;
40434347   UINT8 *ROM = memory_region(machine, "audiocpu");
40444348   UINT8 *buffer;
4045   UINT8 *src = memory_region(machine, "gfx1");
4046   int len = memory_region_length(machine, "gfx1");
4349   UINT8 *src = memory_region(machine, "sprites");
4350   int len = memory_region_length(machine, "sprites");
40474351
40484352   init_cave(machine);
40494353
r7640r7641
40604364      auto_free(machine, buffer);
40614365   }
40624366
4063   state->region_byte = 0x05;
4064
40654367   unpack_sprites(machine);
40664368   state->spritetype[0] = 2;   // Normal sprites with different position handling
40674369   state->kludge = 3;
r7640r7641
40944396   cave_state *state = (cave_state *)machine->driver_data;
40954397   UINT8 *ROM = memory_region(machine, "audiocpu");
40964398   UINT8 *buffer;
4097   UINT8 *src = memory_region(machine, "gfx1");
4098   int len = memory_region_length(machine, "gfx1");
4399   UINT8 *src = memory_region(machine, "sprites");
4400   int len = memory_region_length(machine, "sprites");
40994401   int i, j;
41004402
41014403   init_cave(machine);
r7640r7641
41384440
41394441}
41404442
4141
41424443static DRIVER_INIT( sailormn )
41434444{
41444445   cave_state *state = (cave_state *)machine->driver_data;
41454446   UINT8 *ROM = memory_region(machine, "audiocpu");
41464447   UINT8 *buffer;
4147   UINT8 *src = memory_region(machine, "gfx1");
4148   int len = memory_region_length(machine, "gfx1");
4448   UINT8 *src = memory_region(machine, "sprites");
4449   int len = memory_region_length(machine, "sprites");
41494450
41504451   init_cave(machine);
41514452
r7640r7641
41624463      auto_free(machine, buffer);
41634464   }
41644465
4165   sailormn_unpack_tiles( machine, "gfx4" );
4466   sailormn_unpack_tiles( machine, "layer2" );
41664467
4167   state->region_byte = 0x11;
4168
41694468   unpack_sprites(machine);
41704469   state->spritetype[0] = 2;   // Normal sprites with different position handling
41714470   state->kludge = 1;
r7640r7641
41754474   state_save_register_global(machine, state->sailormn_tilebank);
41764475}
41774476
4477static DRIVER_INIT( tjumpman )
4478{
4479   cave_state *state = (cave_state *)machine->driver_data;
4480   init_cave(machine);
4481
4482   unpack_sprites(machine);
4483   state->spritetype[0] = 2;   // Normal sprites with different position handling
4484   state->kludge = 3;
4485   state->time_vblank_irq = 17376;
4486
4487   state->hopper = 0;
4488   state_save_register_global(machine, state->hopper);
4489}
4490
41784491static DRIVER_INIT( uopoko )
41794492{
41804493   cave_state *state = (cave_state *)machine->driver_data;
41814494   init_cave(machine);
41824495
4183   state->region_byte = -1;
4184
41854496   unpack_sprites(machine);
41864497   state->kludge = 2;
41874498   state->time_vblank_irq = 2000;   /**/
r7640r7641
42124523
42134524***************************************************************************/
42144525
4215GAME( 1994, pwrinst2,   0,        pwrinst2, metmqstr, pwrinst2, ROT0,   "Atlus/Cave",                           "Power Instinct 2 (US, Ver. 94/04/08)"         , 0 )
4216GAME( 1994, pwrinst2j,  pwrinst2, pwrinst2, metmqstr, pwrinst2j,ROT0,   "Atlus/Cave",                           "Gouketsuji Ichizoku 2 (Japan, Ver. 94/04/08)"      , 0 )
4217GAME( 1994, mazinger,   0,        mazinger, mazinger, mazinger, ROT90,  "Banpresto/Dynamic Pl. Toei Animation", "Mazinger Z (International/Japan)"         , 0 ) // region in eeprom
4218GAME( 1995, donpachi,   0,        donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (US)"                  , 0 )
4219GAME( 1995, donpachij,  donpachi, donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (Japan)"               , 0 )
4220GAME( 1995, donpachikr, donpachi, donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (Korea)"               , 0 )
4221GAME( 1995, donpachihk, donpachi, donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (Hong Kong)"               , 0 )
4222GAME( 1995, metmqstr,   0,        metmqstr, metmqstr, metmqstr, ROT0,   "Banpresto/Pandorabox",                 "Metamoqester (International)"            , 0 )
4223GAME( 1995, nmaster,    metmqstr, metmqstr, metmqstr, metmqstr, ROT0,   "Banpresto/Pandorabox",                 "Oni - The Ninja Master (Japan)"            , 0 )
4224GAME( 1995, plegends,   0,        pwrinst2, metmqstr, pwrinst2j,ROT0,   "Atlus/Cave",                           "Power Instinct Legends (US, Ver. 95/06/20)"      , 0 )
4526GAME( 1994, pwrinst2,   0,        pwrinst2, metmqstr, pwrinst2, ROT0,   "Atlus/Cave",                           "Power Instinct 2 (US, Ver. 94/04/08)",                   0 )
4527GAME( 1994, pwrinst2j,  pwrinst2, pwrinst2, metmqstr, pwrinst2j,ROT0,   "Atlus/Cave",                           "Gouketsuji Ichizoku 2 (Japan, Ver. 94/04/08)",           0 )
4528
4529// The EEPROM determines the region, program roms are the same between sets
4530GAME( 1994, mazinger,   0,        mazinger, cave,     mazinger, ROT90,  "Banpresto/Dynamic Pl. Toei Animation", "Mazinger Z (World)",                                     0 )
4531GAME( 1994, mazingerj,  mazinger, mazinger, cave,     mazinger, ROT90,  "Banpresto/Dynamic Pl. Toei Animation", "Mazinger Z (Japan)",                                     0 )
4532
4533GAME( 1995, donpachi,   0,        donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (US)",                                          0 )
4534GAME( 1995, donpachij,  donpachi, donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (Japan)",                                       0 )
4535GAME( 1995, donpachikr, donpachi, donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (Korea)",                                       0 )
4536GAME( 1995, donpachihk, donpachi, donpachi, cave,     donpachi, ROT270, "Atlus/Cave",                           "DonPachi (Hong Kong)",                                   0 )
4537
4538GAME( 1995, metmqstr,   0,        metmqstr, metmqstr, metmqstr, ROT0,   "Banpresto/Pandorabox",                 "Metamoqester (International)",                           0 )
4539GAME( 1995, nmaster,    metmqstr, metmqstr, metmqstr, metmqstr, ROT0,   "Banpresto/Pandorabox",                 "Oni - The Ninja Master (Japan)",                         0 )
4540
4541GAME( 1995, plegends,   0,        pwrinst2, metmqstr, pwrinst2j,ROT0,   "Atlus/Cave",                           "Power Instinct Legends (US, Ver. 95/06/20)",             0 )
42254542GAME( 1995, plegendsj,  plegends, pwrinst2, metmqstr, pwrinst2j,ROT0,   "Atlus/Cave",                           "Gouketsuji Ichizoku Saikyou Densetsu (Japan, Ver. 95/06/20)", 0 )
4226GAME( 1995, sailormn,   0,        sailormn, sailormn, sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (JUEHTK, Ver. 95/03/22B)"   , 0 ) // region in eeprom
4227GAME( 1995, sailormno,  sailormn, sailormn, sailormn, sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (JUEHTK, Ver. 95/03/22)"   , 0 ) // region in eeprom
4228GAME( 1996, agallet,    0,        sailormn, sailormn, agallet,  ROT270, "Banpresto / Gazelle",                  "Air Gallet (JUEHTK)"               , 0 ) // board was taiwan, region in eeprom
4229GAME( 1996, hotdogst,   0,        hotdogst, cave,     hotdogst, ROT90,  "Marble",                               "Hotdog Storm (International)"            , 0 )
4230GAME( 1997, ddonpach,   0,        ddonpach, cave,     ddonpach, ROT270, "Atlus/Cave",                           "DoDonPachi (International, Master Ver. 97/02/05)"   , 0 )
4231GAME( 1997, ddonpachj,  ddonpach, ddonpach, cave,     ddonpach, ROT270, "Atlus/Cave",                           "DoDonPachi (Japan, Master Ver. 97/02/05)"      , 0 )
4232GAME( 1998, dfeveron,   feversos, dfeveron, cave,     dfeveron, ROT270, "Cave (Nihon System license)",          "Dangun Feveron (Japan, Ver. 98/09/17)"         , 0 )
4233GAME( 1998, feversos,   0,        dfeveron, cave,     feversos, ROT270, "Cave (Nihon System license)",          "Fever SOS (International, Ver. 98/09/25)"      , 0 )
4234GAME( 1998, esprade,    0,        esprade,  cave,     esprade,  ROT270, "Atlus/Cave",                           "ESP Ra.De. (International, Ver. 98/04/22)"      , 0 )
4235GAME( 1998, espradej,   esprade,  esprade,  cave,     esprade,  ROT270, "Atlus/Cave",                           "ESP Ra.De. (Japan, Ver. 98/04/21)"         , 0 )
4236GAME( 1998, espradejo,  esprade,  esprade,  cave,     esprade,  ROT270, "Atlus/Cave",                           "ESP Ra.De. (Japan, Ver. 98/04/14)"         , 0 )
4237GAME( 1998, uopoko,     0,        uopoko,   cave,     uopoko,   ROT0,   "Cave (Jaleco license)",                "Puzzle Uo Poko (International)"            , 0 )
4238GAME( 1998, uopokoj,    uopoko,   uopoko,   cave,     uopoko,   ROT0,   "Cave (Jaleco license)",                "Puzzle Uo Poko (Japan)"               , 0 )
4239GAME( 1999, guwange,    0,        guwange,  guwange,  guwange,  ROT270, "Atlus/Cave",                           "Guwange (Japan, Master Ver. 99/06/24)"         , 0 )
4240GAME( 1999, gaia,       0,        gaia,     gaia,     gaia,     ROT0,   "Noise Factory",                        "Gaia Crusaders",      GAME_IMPERFECT_SOUND ) // cuts out occasionally
4241GAME( 2001, theroes,    0,        gaia,     theroes,  gaia,     ROT0,   "Primetek Investments",                 "Thunder Heroes",      GAME_IMPERFECT_SOUND ) // cuts out occasionally
42424543
4243GAME( 1999, korokoro,   0,        korokoro, korokoro, korokoro, ROT0,   "Takumi",                               "Koro Koro Quest (Japan)"               , 0 )
4544// The EEPROM determines the region, program roms are the same between sets
4545GAME( 1995, sailormn,   0,        sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Europe)",    0 )
4546GAME( 1995, sailormnu,  sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22B, USA)",       0 )
4547GAME( 1995, sailormnj,  sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Japan)",     0 )
4548GAME( 1995, sailormnk,  sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Korea)",     0 )
4549GAME( 1995, sailormnt,  sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Taiwan)",    0 )
4550GAME( 1995, sailormnh,  sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Hong Kong)", 0 )
4551GAME( 1995, sailormno,  sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22, Europe)",     0 )
4552GAME( 1995, sailormnou, sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22, USA)",        0 )
4553GAME( 1995, sailormnoj, sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22, Japan)",      0 )
4554GAME( 1995, sailormnok, sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22, Korea)",      0 )
4555GAME( 1995, sailormnot, sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22, Taiwan)",     0 )
4556GAME( 1995, sailormnoh, sailormn, sailormn, cave,     sailormn, ROT0,   "Banpresto",                            "Pretty Soldier Sailor Moon (Ver. 95/03/22, Hong Kong)"   , 0 )
4557
4558// The EEPROM determines the region, program roms are the same between sets
4559GAME( 1996, agallet,    0,        sailormn, cave,     agallet,  ROT270, "Banpresto / Gazelle",                  "Air Gallet (Europe)", 0 )
4560GAME( 1996, agalletu,   agallet,  sailormn, cave,     agallet,  ROT270, "Banpresto / Gazelle",                  "Air Gallet (USA)", 0 )
4561GAME( 1996, agalletj,   agallet,  sailormn, cave,     agallet,  ROT270, "Banpresto / Gazelle",                  "Air Gallet (Japan)", 0 )
4562GAME( 1996, agalletk,   agallet,  sailormn, cave,     agallet,  ROT270, "Banpresto / Gazelle",                  "Air Gallet (Korea)", 0 )
4563GAME( 1996, agallett,   agallet,  sailormn, cave,     agallet,  ROT270, "Banpresto / Gazelle",                  "Air Gallet (Taiwan)", 0 )
4564GAME( 1996, agalleth,   agallet,  sailormn, cave,     agallet,  ROT270, "Banpresto / Gazelle",                  "Air Gallet (Hong Kong)",                               0 )
4565
4566GAME( 1996, hotdogst,   0,        hotdogst, cave,     hotdogst, ROT90,  "Marble",                               "Hotdog Storm (International)",                         0 )
4567
4568GAME( 1997, ddonpach,   0,        ddonpach, cave,     ddonpach, ROT270, "Atlus/Cave",                           "DoDonPachi (International, Master Ver. 97/02/05)",     0 )
4569GAME( 1997, ddonpachj,  ddonpach, ddonpach, cave,     ddonpach, ROT270, "Atlus/Cave",                           "DoDonPachi (Japan, Master Ver. 97/02/05)",             0 )
4570
4571GAME( 1998, dfeveron,   feversos, dfeveron, cave,     dfeveron, ROT270, "Cave (Nihon System license)",          "Dangun Feveron (Japan, Ver. 98/09/17)",                0 )
4572GAME( 1998, feversos,   0,        dfeveron, cave,     feversos, ROT270, "Cave (Nihon System license)",          "Fever SOS (International, Ver. 98/09/25)",             0 )
4573
4574GAME( 1998, esprade,    0,        esprade,  cave,     esprade,  ROT270, "Atlus/Cave",                           "ESP Ra.De. (International, Ver. 98/04/22)",            0 )
4575GAME( 1998, espradej,   esprade,  esprade,  cave,     esprade,  ROT270, "Atlus/Cave",                           "ESP Ra.De. (Japan, Ver. 98/04/21)",                    0 )
4576GAME( 1998, espradejo,  esprade,  esprade,  cave,     esprade,  ROT270, "Atlus/Cave",                           "ESP Ra.De. (Japan, Ver. 98/04/14)",                    0 )
4577
4578GAME( 1998, uopoko,     0,        uopoko,   cave,     uopoko,   ROT0,   "Cave (Jaleco license)",                "Puzzle Uo Poko (International)",                       0 )
4579GAME( 1998, uopokoj,    uopoko,   uopoko,   cave,     uopoko,   ROT0,   "Cave (Jaleco license)",                "Puzzle Uo Poko (Japan)",                               0 )
4580
4581GAME( 1999, guwange,    0,        guwange,  guwange,  guwange,  ROT270, "Atlus/Cave",                           "Guwange (Japan, Master Ver. 99/06/24)",                0 )
4582
4583GAME( 1999, gaia,       0,        gaia,     gaia,     gaia,     ROT0,   "Noise Factory",                        "Gaia Crusaders",                                      GAME_IMPERFECT_SOUND ) // cuts out occasionally
4584
4585GAME( 2001, theroes,    0,        gaia,     theroes,  gaia,     ROT0,   "Primetek Investments",                 "Thunder Heroes",                                      GAME_IMPERFECT_SOUND ) // cuts out occasionally
4586
4587GAME( 1999, korokoro,   0,        korokoro, korokoro, korokoro, ROT0,   "Takumi",                               "Koro Koro Quest (Japan)",                              0 )
4588
4589GAME( 1999, crusherm,   0,        crusherm, korokoro, korokoro, ROT0,   "Takumi",                               "Crusher Makochan (Japan)",                             0 )
4590
4591GAME( 1999, tjumpman,   0,        tjumpman, tjumpman, tjumpman, ROT0,   "Namco",                                "Tobikose! Jumpman",                                    0 )
src/tools/srcclean.c
r7640r7641
237237   {
238238      /* explain what we did */
239239      printf("Cleaned up %s:", argv[1]);
240      if (removed_spaces) printf(" removed %d spaces", removed_spaces);
241      if (removed_tabs) printf(" removed %d tabs", removed_tabs);
242      if (hichars) printf(" fixed %d high-ASCII chars", hichars);
240      if (removed_spaces) printf(" removed %d space(s)", removed_spaces);
241      if (removed_tabs) printf(" removed %d tab(s)", removed_tabs);
242      if (hichars) printf(" fixed %d high-ASCII char(s)", hichars);
243243      if (fixed_nix_style) printf(" fixed *nix-style line-ends");
244244      if (fixed_mac_style) printf(" fixed Mac-style line-ends");
245245      printf("\n");
src/tools/split.c
r7640r7641
450450   else
451451      goto usage;
452452
453   return 0;
453   return result;
454454
455455usage:
456456   fprintf(stderr,
src/osd/sdl/sound.c
r7640r7641
507507{
508508   if (initialized_audio)
509509   {
510      mame_printf_debug("sdl_kill: closing audio\n");
510      mame_printf_verbose("sdl_kill: closing audio\n");
511511
512512      SDL_CloseAudio();
513513   }
src/osd/sdl/input.c
r7640r7641
967967            buf[i-1] = 0;
968968         mks[0]=0;
969969         sks[0]=0;
970         memset(kns, 0, 21);
970         memset(kns, 0, ARRAY_LENGTH(kns));
971971         sscanf(buf, "%20s %20s %x %x %20c\n",
972972               mks, sks, &vk, &ak, kns);
973973
src/osd/sdl/debugwin.c
r7640r7641
570570   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(info->win, "chunks_2")), bpc == 2);
571571   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(info->win, "chunks_4")), bpc == 4);
572572   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(info->win, "physical_addresses")), pa);
573   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(info->win, "locical_addresses")), !pa);
573   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(info->win, "logical_addresses")), !pa);
574574   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(info->win, "reverse")), rev);
575575}
576576
src/osd/sdl/window.c
r7640r7641
738738   // load the layout
739739   window->target = render_target_alloc(machine, NULL, FALSE);
740740   if (window->target == NULL)
741   {
742      osd_free(wp);
741743      goto error;
744   }
742745
743746   // set the specific view
744747   sprintf(option, SDLOPTION_VIEW("%d"), index);
src/osd/sdl/testkeys.c
r7640r7641
146146            quit=1;
147147         else
148148         {
149            memset(buf, 0, 19);
149            memset(buf, 0, ARRAY_LENGTH(buf));
150150            utf8_from_uchar(buf, sizeof(buf), event.key.keysym.unicode);
151151            printf("ITEM_ID_XY %s 0x%x 0x%x %s \n",
152152#if (SDL_VERSION_ATLEAST(1,3,0))
src/osd/sdl/gl_shader_tool.c
r7640r7641
345345      *fragment_shader=0;
346346   }
347347
348        return 0;
348        return res;
349349}
350350
351351int gl_compile_shader_source( GLhandleARB *shader, GLenum type, const char * shader_source, int verbose )
src/osd/windows/debugwin.c
r7640r7641
759759         // send the appropriate message to this view's scrollbar
760760         if (info->view[viewnum].wnd && info->view[viewnum].vscroll)
761761         {
762            int message = SB_LINELEFT;
762            int message_type = SB_LINELEFT;
763763            if (delta < 0)
764764            {
765               message = SB_LINERIGHT;
765               message_type = SB_LINERIGHT;
766766               delta = -delta;
767767            }
768768            while (delta > 0)
769769            {
770               SendMessage(info->view[viewnum].wnd, WM_VSCROLL, message, (LPARAM)info->view[viewnum].vscroll);
770               SendMessage(info->view[viewnum].wnd, WM_VSCROLL, message_type, (LPARAM)info->view[viewnum].vscroll);
771771               delta--;
772772            }
773773         }
src/osd/windows/video.c
r7640r7641
170170
171171void winvideo_monitor_refresh(win_monitor_info *monitor)
172172{
173   HRESULT result;
173   BOOL result;
174174
175175   // fetch the latest info about the monitor
176176   monitor->info.cbSize = sizeof(monitor->info);
src/emu/debug/express.c
r7640r7641
11151115      /* If this is an operator, process it */
11161116      else if (token->type == TOK_OPERATOR)
11171117      {
1118         int exprerr = normalize_operator(expr, tokindex);
1118         exprerr = normalize_operator(expr, tokindex);
11191119         if (exprerr != 0)
11201120            return exprerr;
11211121
src/emu/cpu/v30mz/v30mz.c
r7640r7641
6060    UINT8  b[16];   /* or as 8 bit registers */
6161} necbasicregs;
6262
63typedef struct _nec_config nec_config;
64struct _nec_config
65{
66   const UINT8*   v25v35_decryptiontable; // internal decryption table
67};
68
6963/* default configuration */
7064static const nec_config default_config =
7165{
72   NULL
66   NULL       // no internal decryption table
7367};
7468
7569typedef struct _v30mz_state v30mz_state;
r7640r7641
8175   UINT16   ip;
8276
8377   INT32   SignVal;
84    UINT32  AuxVal, OverVal, ZeroVal, CarryVal, ParityVal; /* 0 or non-0 valued flags */
78   UINT32  AuxVal, OverVal, ZeroVal, CarryVal, ParityVal; /* 0 or non-0 valued flags */
8579   UINT8   TF, IF, DF, MF;    /* 0 or 1 valued flags */   /* OB[19.07.99] added Mode Flag V30 */
8680   UINT32   int_vector;
8781   UINT32   pending_irq;
src/emu/cpu/v30mz/nec.h
r7640r7641
33#define __NECINTRF_H__
44
55
6typedef struct _nec_config nec_config;
7struct _nec_config
8{
9   const UINT8*   v25v35_decryptiontable; // internal decryption table
10};
11
612enum
713{
814   NEC_PC=0,
src/emu/cpu/h83002/h8_8.c
r7640r7641
528528      frc = cpu_get_total_cycles(h8->device) / divider[h8->per_regs[0x96]];
529529      frc %= 65536;
530530      return frc>>8;
531      break;
532531   case 0x93:      // FRC L
533532      frc = cpu_get_total_cycles(h8->device) / divider[h8->per_regs[0x96]];
534533      frc %= 65536;
535534      return frc&0xff;
536      break;
537535   case 0xb2:        // port 1 data
538536      val = memory_read_byte(h8->io, H8_PORT_1);
539537      break;
src/emu/cpu/m68000/m68kfpu.c
r7640r7641
642642               }
643643               break;
644644
645            default:   
645            default:
646646               fatalerror("M68kFPU: READ_EA_FPE0: unhandled mode %d, reg %d, at %08X\n", mode, reg, REG_PC);
647647               break;
648648         }
r7640r7641
717717   int opmode = w2 & 0x7f;
718718   floatx80 source;
719719
720   // fmovecr #$f, fp0   f200 5c0f
721   
720   // fmovecr #$f, fp0 f200 5c0f
721
722722   if (rm)
723723   {
724724      switch (src)
r7640r7641
837837      source = REG_FP[src];
838838   }
839839
840   
841840
841
842842   switch (opmode)
843843   {
844844      case 0x00:      // FMOVE
r7640r7641
877877         break;
878878      }
879879      case 0x1a:      // FNEG
880      {               
880      {
881881         REG_FP[dst] = source;
882882         REG_FP[dst].high ^= 0x8000;
883883         SET_CONDITION_CODES(m68k, REG_FP[dst]);
r7640r7641
949949      }
950950      case 1:      // Single-precision Real
951951      {
952         UINT32 d = floatx80_to_float32(REG_FP[src]);
952         UINT32 d = floatx80_to_float32(REG_FP[src]);
953953         WRITE_EA_32(m68k, ea, d);
954954         break;
955955      }
956956      case 2:      // Extended-precision Real
957957      {
958         WRITE_EA_FPE(m68k, ea, REG_FP[src]);   
958         WRITE_EA_FPE(m68k, ea, REG_FP[src]);
959959         break;
960960      }
961961      case 3:      // Packed-decimal Real with Static K-factor
src/emu/cpu/m37710/m37710op.h
r7640r7641
932932#undef OP_BRK
933933#define OP_BRK()                                             \
934934         REG_PC++;                                       \
935         fatalerror("BRK at PC=%06x", REG_PB|REG_PC);                           \
935         logerror("fatalerror M37710: BRK at PC=%06x", REG_PB|REG_PC);                           \
936936         m37710i_interrupt_software(cpustate, 0xfffa)
937937
938938/* M37710  Branch Always */
r7640r7641
23132313/* M37710 unimplemented opcode */
23142314#undef OP_UNIMP
23152315#define OP_UNIMP()                                             \
2316   fatalerror("M37710: UNIMPLEMENTED OPCODE!  K=%x PC=%x", REG_PB, REG_PPC);
2316   logerror("fatalerror: M37710: UNIMPLEMENTED OPCODE!  K=%x PC=%x", REG_PB, REG_PPC);
23172317
23182318/* M37710 load data bank register */
23192319#undef OP_LDTAAA
src/emu/cpu/tlcs90/tlcs90.c
r7640r7641
26362636   cpustate->internal_registers[offset] = data;
26372637}
26382638
2639static void state_register( running_device *device )
2640{
2641   t90_Regs *cpustate = get_safe_token(device);
2642
2643   state_save_register_device_item(device, 0, cpustate->prvpc.w.l);
2644   state_save_register_device_item(device, 0, cpustate->pc.w.l);
2645   state_save_register_device_item(device, 0, cpustate->sp.w.l);
2646   state_save_register_device_item(device, 0, cpustate->af.w.l);
2647   state_save_register_device_item(device, 0, cpustate->bc.w.l);
2648   state_save_register_device_item(device, 0, cpustate->de.w.l);
2649   state_save_register_device_item(device, 0, cpustate->hl.w.l);
2650   state_save_register_device_item(device, 0, cpustate->ix.w.l);
2651   state_save_register_device_item(device, 0, cpustate->iy.w.l);
2652   state_save_register_device_item(device, 0, cpustate->af2.w.l);
2653   state_save_register_device_item(device, 0, cpustate->bc2.w.l);
2654   state_save_register_device_item(device, 0, cpustate->de2.w.l);
2655   state_save_register_device_item(device, 0, cpustate->hl2.w.l);
2656   state_save_register_device_item(device, 0, cpustate->halt);
2657   state_save_register_device_item(device, 0, cpustate->after_EI);
2658   state_save_register_device_item(device, 0, cpustate->irq_state);
2659   state_save_register_device_item(device, 0, cpustate->irq_mask);
2660   state_save_register_device_item(device, 0, cpustate->icount);
2661   state_save_register_device_item(device, 0, cpustate->extra_cycles);
2662
2663   state_save_register_device_item_array(device, 0, cpustate->internal_registers);
2664   state_save_register_device_item(device, 0, cpustate->ixbase);
2665   state_save_register_device_item(device, 0, cpustate->iybase);
2666
2667   state_save_register_device_item_array(device, 0, cpustate->timer_value);
2668   state_save_register_device_item(device, 0, cpustate->timer4_value);
2669
2670   // Work registers
2671   state_save_register_device_item(device, 0, cpustate->op);
2672   state_save_register_device_item(device, 0, cpustate->mode1);
2673   state_save_register_device_item(device, 0, cpustate->r1);
2674   state_save_register_device_item(device, 0, cpustate->r1b);
2675   state_save_register_device_item(device, 0, cpustate->mode2);
2676   state_save_register_device_item(device, 0, cpustate->r2);
2677   state_save_register_device_item(device, 0, cpustate->r2b);
2678
2679   state_save_register_device_item(device, 0, cpustate->cyc_t);
2680   state_save_register_device_item(device, 0, cpustate->cyc_f);
2681   state_save_register_device_item(device, 0, cpustate->addr);
2682}
2683
2684
26392685static CPU_INIT( t90 )
26402686{
26412687   t90_Regs *cpustate = get_safe_token(device);
26422688   int i, p;
26432689
2644//  state_save_register_device_item(device, 0, Z80.prvpc.w.l);
2690   state_register(device);
26452691
26462692   for (i = 0; i < 256; i++)
26472693   {
src/emu/cpu/avr8/avr8.c
r7640r7641
853853                        opcycles = 2;
854854                        break;
855855                    case 0x0900:    // SBIC A,b
856                         if(!(READ_IO_8(cpustate, ACONST5(op)) & (1 << RR3(op))))
857                         {
856                      if(!(READ_IO_8(cpustate, ACONST5(op)) & (1 << RR3(op))))
857                      {
858858                     opcycles += avr8_is_long_opcode(op) ? 2 : 1;
859859                            cpustate->pc += avr8_is_long_opcode(op) ? 2 : 1;
860860                  }
src/emu/cpu/i386/i386op16.c
r7640r7641
27382738         {
27392739            UINT16 address, selector;
27402740            if( modrm >= 0xc0 ) {
2741               fatalerror("NYI");
2741               fatalerror("i386: groupFF_16 /%d NYI", (modrm >> 3) & 0x7);
27422742            } else {
27432743               UINT32 ea = GetEA(cpustate,modrm);
27442744               address = READ16(cpustate,ea + 0);
r7640r7641
27732773         {
27742774            UINT16 address, selector;
27752775            if( modrm >= 0xc0 ) {
2776               fatalerror("NYI");
2776               fatalerror("i386: groupFF_16 /%d NYI", (modrm >> 3) & 0x7);
27772777            } else {
27782778               UINT32 ea = GetEA(cpustate,modrm);
27792779               address = READ16(cpustate,ea + 0);
r7640r7641
32163216   UINT8 modrm = FETCH(cpustate);
32173217
32183218   if( modrm >= 0xc0 ) {
3219      fatalerror("NYI");
3219      fatalerror("i386: load_far_pointer16 NYI");
32203220   } else {
32213221      UINT32 ea = GetEA(cpustate,modrm);
32223222      STORE_REG16(modrm, READ16(cpustate,ea + 0));
src/emu/cpu/i386/i386priv.h
r7640r7641
432432      {
433433         translate_address(cpustate,&address);
434434      }
435   
435
436436      address &= cpustate->a20_mask;
437437      value = memory_decrypted_read_dword(cpustate->program, address);
438438      cpustate->eip += 4;
r7640r7641
466466      {
467467         translate_address(cpustate,&address);
468468      }
469   
469
470470      address &= cpustate->a20_mask;
471471      value = memory_read_word_32le( cpustate->program, address );
472472   }
r7640r7641
487487      {
488488         translate_address(cpustate,&address);
489489      }
490   
490
491491      address &= cpustate->a20_mask;
492492      value = memory_read_dword_32le( cpustate->program, address );
493493   }
r7640r7641
513513      {
514514         translate_address(cpustate,&address);
515515      }
516   
516
517517      address &= cpustate->a20_mask;
518518      value = (((UINT64) memory_read_dword_32le( cpustate->program, address+0 )) << 0) |
519519            (((UINT64) memory_read_dword_32le( cpustate->program, address+4 )) << 32);
r7640r7641
545545      {
546546         translate_address(cpustate,&address);
547547      }
548   
548
549549      address &= cpustate->a20_mask;
550550      memory_write_word_32le(cpustate->program, address, value);
551551   }
r7640r7641
564564      {
565565         translate_address(cpustate,&address);
566566      }
567   
567
568568      ea &= cpustate->a20_mask;
569569      memory_write_dword_32le(cpustate->program, address, value);
570570   }
r7640r7641
588588      {
589589         translate_address(cpustate,&address);
590590      }
591   
591
592592      ea &= cpustate->a20_mask;
593593      memory_write_dword_32le(cpustate->program, address+0, value & 0xffffffff);
594594      memory_write_dword_32le(cpustate->program, address+4, (value >> 32) & 0xffffffff);
src/emu/cpu/i386/pentops.c
r7640r7641
3030{
3131   UINT8 modm = FETCH(cpustate);
3232   if( modm >= 0xc0 ) {
33      fatalerror("invalid modm");
33      fatalerror("pentium: cmpxchg8b_m64 - invalid modm");
3434   } else {
3535      UINT32 ea = GetEA(cpustate,modm);
3636      UINT64 value = READ64(cpustate,ea);
src/emu/cpu/i386/i386op32.c
r7640r7641
25792579            UINT16 selector;
25802580            UINT32 address;
25812581            if( modrm >= 0xc0 ) {
2582               fatalerror("NYI");
2582               fatalerror("i386: groupFF_32 /%d: NYI", (modrm >> 3) & 0x7);
25832583            } else {
25842584               UINT32 ea = GetEA(cpustate,modrm);
25852585               address = READ32(cpustate,ea + 0);
r7640r7641
26152615            UINT16 selector;
26162616            UINT32 address;
26172617            if( modrm >= 0xc0 ) {
2618               fatalerror("NYI");
2618               fatalerror("i386: groupFF_32 /%d: NYI", (modrm >> 3) & 0x7);
26192619            } else {
26202620               UINT32 ea = GetEA(cpustate,modrm);
26212621               address = READ32(cpustate,ea + 0);
r7640r7641
30263026   UINT8 modrm = FETCH(cpustate);
30273027
30283028   if( modrm >= 0xc0 ) {
3029      fatalerror("NYI");
3029      fatalerror("i386: load_far_pointer32 NYI");
30303030   } else {
30313031      UINT32 ea = GetEA(cpustate,modrm);
30323032      STORE_REG32(modrm, READ32(cpustate,ea + 0));
src/emu/cpu/mc68hc11/hc11ops.c
r7640r7641
32293229   CYCLES(cpustate, 4);
32303230}
32313231
3232/* SUBD DIR        0x93 */
3233static void HC11OP(subd_dir)(hc11_state *cpustate)
3234{
3235   UINT8 d = FETCH(cpustate);
3236   UINT16 i = READ16(cpustate, d);
3237   UINT32 r = REG_D - i;
3238   CLEAR_NZVC(cpustate);
3239   SET_N16(r);
3240   SET_Z16(r);
3241   SET_V_SUB16(r, i, REG_D);
3242   SET_C16(r);
3243   REG_D = (UINT16)r;
3244   CYCLES(cpustate, 5);
3245}
3246
3247/* SUBD EXT        0xB3 */
3248static void HC11OP(subd_ext)(hc11_state *cpustate)
3249{
3250   UINT16 addr = FETCH16(cpustate);
3251   UINT16 i = READ16(cpustate, addr);
3252   UINT32 r = REG_D - i;
3253   CLEAR_NZVC(cpustate);
3254   SET_N16(r);
3255   SET_Z16(r);
3256   SET_V_SUB16(r, i, REG_D);
3257   SET_C16(r);
3258   REG_D = (UINT16)r;
3259   CYCLES(cpustate, 6);
3260}
3261
32323262/* SUBD INDX        0xA3 */
32333263static void HC11OP(subd_indx)(hc11_state *cpustate)
32343264{
src/emu/cpu/mc68hc11/hc11ops.h
r7640r7641
295295   {   0,      0xe0,         HC11OP(subb_indx)         },
296296   {   0x18,   0xe0,         HC11OP(subb_indy)         },
297297   {   0,      0x83,         HC11OP(subd_imm)         },
298//  {   0,      0x93,           HC11OP(subd_dir)            },
299//  {   0,      0xb3,           HC11OP(subd_ext)            },
298   {   0,      0x93,           HC11OP(subd_dir)            },
299   {   0,      0xb3,           HC11OP(subd_ext)            },
300300   {   0,      0xa3,         HC11OP(subd_indx)         },
301301   {   0x18,   0xa3,         HC11OP(subd_indy)         },
302302   {   0,      0x3f,         HC11OP(swi)               },
src/emu/cpu/ssem/ssem.c
r7640r7641
6161    return v;
6262}
6363
64INLINE UINT32 READ32(ssem_state *cpustate, UINT32 address)
65{
66    UINT32 v = 0;
67    // The MAME core does not have a good way of specifying a minimum datum size that is more than
68    // 8 bits in width.  The minimum datum width on the SSEM is 32 bits, so we need to quadruple
69    // the address value to get the appropriate byte index.
70    address <<= 2;
71
72    v |= memory_read_byte(cpustate->program, address + 0) << 24;
73    v |= memory_read_byte(cpustate->program, address + 1) << 16;
74    v |= memory_read_byte(cpustate->program, address + 2) <<  8;
75    v |= memory_read_byte(cpustate->program, address + 3) <<  0;
76
77    return reverse(v);
78}
79
80INLINE void WRITE32(ssem_state *cpustate, UINT32 address, UINT32 data)
81{
82    UINT32 v = reverse(data);
83
84    // The MAME core does not have a good way of specifying a minimum datum size that is more than
85    // 8 bits in width.  The minimum datum width on the SSEM is 32 bits, so we need to quadruple
86    // the address value to get the appropriate byte index.
87    address <<= 2;
88
89    memory_write_byte(cpustate->program, address + 0, (v >> 24) & 0x000000ff);
90    memory_write_byte(cpustate->program, address + 1, (v >> 16) & 0x000000ff);
91    memory_write_byte(cpustate->program, address + 2, (v >>  8) & 0x000000ff);
92    memory_write_byte(cpustate->program, address + 3, (v >>  0) & 0x000000ff);
93    return;
94}
95
96/*****************************************************************************/
97
6498static void unimplemented_opcode(ssem_state *cpustate, UINT32 op)
6599{
66100    if((cpustate->device->machine->debug_flags & DEBUG_FLAG_ENABLED) != 0)
r7640r7641
80114        {
81115            for(i = 0; i < 0x20; i++)
82116            {
83                UINT32 opcode = reverse(READ32(i));
117                UINT32 opcode = reverse(READ32(cpustate, i));
84118                ssem_dasm_one(string, i, opcode);
85                fprintf(dasm, "%02X: %08X    %s\n", i, opcode, string);
119                fprintf(disasm, "%02X: %08X    %s\n", i, opcode, string);
86120            }
87121
88122            fclose(disasm);
r7640r7641
110144
111145/*****************************************************************************/
112146
113INLINE UINT32 READ32(ssem_state *cpustate, UINT32 address)
114{
115    UINT32 v = 0;
116    // The MAME core does not have a good way of specifying a minimum datum size that is more than
117    // 8 bits in width.  The minimum datum width on the SSEM is 32 bits, so we need to quadruple
118    // the address value to get the appropriate byte index.
119    address <<= 2;
120
121    v |= memory_read_byte(cpustate->program, address + 0) << 24;
122    v |= memory_read_byte(cpustate->program, address + 1) << 16;
123    v |= memory_read_byte(cpustate->program, address + 2) <<  8;
124    v |= memory_read_byte(cpustate->program, address + 3) <<  0;
125
126    return reverse(v);
127}
128
129INLINE void WRITE32(ssem_state *cpustate, UINT32 address, UINT32 data)
130{
131    UINT32 v = reverse(data);
132
133    // The MAME core does not have a good way of specifying a minimum datum size that is more than
134    // 8 bits in width.  The minimum datum width on the SSEM is 32 bits, so we need to quadruple
135    // the address value to get the appropriate byte index.
136    address <<= 2;
137
138    memory_write_byte(cpustate->program, address + 0, (v >> 24) & 0x000000ff);
139    memory_write_byte(cpustate->program, address + 1, (v >> 16) & 0x000000ff);
140    memory_write_byte(cpustate->program, address + 2, (v >>  8) & 0x000000ff);
141    memory_write_byte(cpustate->program, address + 3, (v >>  0) & 0x000000ff);
142    return;
143}
144
145/*****************************************************************************/
146
147147static CPU_INIT( ssem )
148148{
149149    ssem_state *cpustate = get_safe_token(device);
src/emu/cpu/z8000/makedab.c
r7640r7641
88
99int main(int ac, char **av)
1010{
11   int i, result;
11   int i;
1212
1313   for (i = 0; i < DF; i++) {
1414      if (i & CF) {
src/emu/cpu/mn10200/mn10200.h
r7640r7641
3737   MN10200_PORT4
3838};
3939
40enum
41{
42   MN10200_IRQ0,
43   MN10200_IRQ1,
44   MN10200_IRQ2,
45   MN10200_IRQ3
46};
47
4048CPU_GET_INFO( mn10200 );
4149#define CPU_MN10200 CPU_GET_INFO_NAME( mn10200 )
4250
src/emu/cpu/mn10200/mn10200.c
r7640r7641
22    Panasonic MN10200 emulator
33
44    Written by Olivier Galibert
5    MAME conversion by R. Belmont
5    MAME conversion, timers, and IRQ controller by R. Belmont
66
77*/
88
r7640r7641
1616#define MEM_BYTE (0)
1717#define MEM_WORD (1)
1818
19#define NUM_PRESCALERS (2)
20#define NUM_TIMERS_8BIT   (10)
21#define NUM_IRQ_GROUPS (31)
22
1923extern int mn102_disassemble(char *buffer, UINT32 pc, const UINT8 *oprom);
2024
2125typedef struct _mn102_info mn102_info;
r7640r7641
2731   UINT32 a[4];
2832
2933   UINT8 nmicr, iagr;
30   UINT8 icrl[31], icrh[31];
34   UINT8 icrl[NUM_IRQ_GROUPS], icrh[NUM_IRQ_GROUPS];
3135   UINT16 psw;
3236   UINT16 mdr;
3337
34   struct {
38   struct _simple_timer {
3539   UINT8 mode;
3640   UINT8 base;
3741   UINT8 cur;
38   } simple_timer[10];
42   } simple_timer[NUM_TIMERS_8BIT];
3943
40   struct {
44   emu_timer *timer_timers[NUM_TIMERS_8BIT];
45
46   struct _prescaler {
47   UINT8 cycles;
4148   UINT8 mode;
42   UINT8 base;
43   UINT8 cur;
44   } prescaler[2];
49   } prescaler[NUM_PRESCALERS];
4550
46   struct {
51   struct _dma {
4752   UINT32 adr;
4853   UINT32 count;
4954   UINT16 iadr;
5055   UINT8 ctrll, ctrlh, irq;
5156   } dma[8];
5257
53   struct {
58   struct _serial {
5459   UINT8 ctrll, ctrlh;
5560   UINT8 buf;
5661   } serial[2];
r7640r7641
121126   memory_write_word_16le(mn102->program, address, data);
122127}
123128
129INLINE INT32 r24u(mn102_info *mn102, offs_t adr)
130{
131   return mn102_read_word(mn102, adr)|(mn102_read_byte(mn102, adr+2)<<16);
132}
133
134INLINE void w24(mn102_info *mn102, offs_t adr, UINT32 val)
135{
136/*  if(adr == 0x4075aa || adr == 0x40689a || adr == 0x4075a2) {
137        log_write("TRACE", adr, val, MEM_LONG);
138    }*/
139   mn102_write_byte(mn102, adr, val);
140   mn102_write_byte(mn102, adr+1, val>>8);
141   mn102_write_byte(mn102, adr+2, val>>16);
142}
143
144INLINE void mn102_change_pc(mn102_info *mn102, UINT32 pc)
145{
146    mn102->pc = pc & 0xffffff;
147}
148
124149INLINE mn102_info *get_safe_token(running_device *device)
125150{
126151   assert(device != NULL);
r7640r7641
131156   return (mn102_info *)device->token;
132157}
133158
159static void mn102_take_irq(mn102_info *mn102, int level, int group)
160{
161   if(!(mn102->psw & 0x800))
162   {
163//      if (group != 8) printf("MN10200: Dropping irq L %d G %d pc=%x, a3=%x\n", level, group, mn102->pc, mn102->a[3]);
164      return;
165   }
166
167//  if (group != 8) printf("MN10200: Taking irq L %d G %d pc=%x, a3=%x\n", level, group, mn102->pc, mn102->a[3]);
168
169   mn102->a[3] -= 6;
170   w24(mn102, mn102->a[3]+2, mn102->pc);
171   mn102_write_word(mn102, mn102->a[3], mn102->psw);
172   mn102_change_pc(mn102, 0x80008);
173   mn102->psw = (mn102->psw & 0xf0ff) | (level << 8);
174   mn102->iagr = group << 1;
175}
176
177static void refresh_timer(mn102_info *cpustate, int tmr)
178{
179   // enabled?
180   if (cpustate->simple_timer[tmr].mode & 0x80)
181   {
182      UINT8 source = (cpustate->simple_timer[tmr].mode & 3);
183
184      // source is a prescaler?
185      if (source >= 2)
186      {
187         INT32 rate;
188
189         // is prescaler enabled?
190         if (cpustate->prescaler[source-2].mode & 0x80)
191         {
192            // rate = (sysclock / prescaler) / our count
193            rate = cpu_get_clock(cpustate->device) / cpustate->prescaler[source-2].cycles;
194            rate /= cpustate->simple_timer[tmr].base;
195
196            if (tmr != 8)   // HACK: timer 8 is run at 500 kHz by the Taito program for no obvious reason, which kills performance
197               timer_adjust_oneshot(cpustate->timer_timers[tmr], ATTOTIME_IN_HZ(rate), tmr);
198         }
199         else
200         {
201            logerror("MN10200: timer %d using prescaler %d which isn't enabled!\n", tmr, source-2);
202         }
203      }
204   }
205   else   // disabled, so stop it
206   {
207      timer_adjust_oneshot(cpustate->timer_timers[tmr], attotime_never, tmr);
208   }
209}
210
211INLINE void timer_tick_simple(mn102_info *cpustate, int tmr)
212{
213   cpustate->simple_timer[tmr].cur--;
214
215   // did we expire?
216   if (cpustate->simple_timer[tmr].cur == 0)
217   {
218      int group, irq_in_grp, level;
219
220      // does timer auto-reload?  apparently.
221      cpustate->simple_timer[tmr].cur = cpustate->simple_timer[tmr].base;
222
223      // signal the cascade if we're not timer 9
224      if (tmr < (NUM_TIMERS_8BIT-1))
225      {
226         // is next timer enabled?
227         if (cpustate->simple_timer[tmr+1].mode & 0x80)
228         {
229            // is it's source "cascade"?
230            if ((cpustate->simple_timer[tmr+1].mode & 0x3) == 1)
231            {
232               // recurse!
233               timer_tick_simple(cpustate, tmr+1);
234            }
235         }
236      }
237
238      // interrupt from this timer if possible
239      group = (tmr / 4);
240      irq_in_grp = (tmr % 4);
241      level = (cpustate->icrh[group]>>4) & 0x7;
242
243      // indicate interrupt pending
244      cpustate->icrl[group] |= (1 << (4 + irq_in_grp));
245
246      // interrupt detect = pending AND enable
247      cpustate->icrl[group] |= (cpustate->icrh[group]&0x0f) & (cpustate->icrl[group]>>4);
248
249      // is the result enabled?
250      if (cpustate->icrl[group] & (1 << irq_in_grp))
251      {
252//          printf("Timer %d IRQ! (Group %d in_grp %d ICRH %x ICRL %x\n", tmr, group, irq_in_grp, cpustate->icrh[group], cpustate->icrl[group]);
253         // try to take it now
254         mn102_take_irq(cpustate, level, group + 1);
255      }
256   }
257}
258
259static TIMER_CALLBACK( simple_timer_cb )
260{
261   mn102_info *cpustate = (mn102_info *)ptr;
262   int tmr = param;
263
264   // handle our expiring and also tick our cascaded children
265   cpustate->simple_timer[tmr].cur = 1;
266   timer_tick_simple(cpustate, tmr);
267
268   // refresh this timer
269   refresh_timer(cpustate, tmr);
270}
271
134272static CPU_INIT(mn10200)
135273{
136274   mn102_info *cpustate = get_safe_token(device);
275   int tmr;
137276
138277   memset(cpustate, 0, sizeof(mn102_info));
139278
140279   cpustate->device = device;
141280   cpustate->program = device->space(AS_PROGRAM);
142281   cpustate->io = device->space(AS_IO);
282
283   state_save_register_device_item(device, 0, cpustate->pc);
284   state_save_register_device_item_array(device, 0, cpustate->d);
285   state_save_register_device_item_array(device, 0, cpustate->a);
286   state_save_register_device_item(device, 0, cpustate->nmicr);
287   state_save_register_device_item(device, 0, cpustate->iagr);
288   state_save_register_device_item_array(device, 0, cpustate->icrl);
289   state_save_register_device_item_array(device, 0, cpustate->icrh);
290   state_save_register_device_item(device, 0, cpustate->psw);
291   state_save_register_device_item(device, 0, cpustate->mdr);
292//  state_save_register_device_item_array(device, 0, cpustate->simple_timer);
293//  state_save_register_device_item_array(device, 0, cpustate->prescaler);
294//  state_save_register_device_item_array(device, 0, cpustate->dma);
295//  state_save_register_device_item_array(device, 0, cpustate->serial);
296   state_save_register_device_item_array(device, 0, cpustate->ddr);
297
298   for (tmr = 0; tmr < NUM_TIMERS_8BIT; tmr++)
299   {
300      cpustate->timer_timers[tmr] = timer_alloc(device->machine, simple_timer_cb, cpustate);
301      timer_adjust_oneshot(cpustate->timer_timers[tmr], attotime_never, tmr);
302   }
143303}
144304
145305static CPU_RESET(mn10200)
146306{
147307   mn102_info *cpustate = get_safe_token(device);
308   int tmr, grp;
148309
149310   memset(cpustate->d, 0, sizeof(cpustate->d));
150311   memset(cpustate->a, 0, sizeof(cpustate->a));
r7640r7641
153314   cpustate->nmicr = 0;
154315   memset(cpustate->icrl, 0, sizeof(cpustate->icrl));
155316   memset(cpustate->icrh, 0, sizeof(cpustate->icrh));
317
318   // reset all timers
319   for (tmr = 0; tmr < NUM_TIMERS_8BIT; tmr++)
320   {
321      cpustate->simple_timer[tmr].mode = 0;
322      cpustate->simple_timer[tmr].cur = 0;
323      cpustate->simple_timer[tmr].base = 0;
324      timer_adjust_oneshot(cpustate->timer_timers[tmr], attotime_never, tmr);
325   }
326
327   // clear all interrupt groups
328   for (grp = 0; grp < NUM_IRQ_GROUPS; grp++)
329   {
330      cpustate->icrl[grp] = cpustate->icrh[grp] = 0;
331   }
156332}
157333
158334static CPU_EXIT(mn10200)
r7640r7641
164340   fatalerror("MN10200: unknown opcode @ PC=%x\n", mn102->pc);
165341}
166342
167INLINE INT32 r24u(mn102_info *mn102, offs_t adr)
168{
169   return mn102_read_word(mn102, adr)|(mn102_read_byte(mn102, adr+2)<<16);
170}
171
172INLINE void w24(mn102_info *mn102, offs_t adr, UINT32 val)
173{
174   if(adr == 0x4075aa || adr == 0x40689a || adr == 0x4075a2) {
175      log_write("TRACE", adr, val, MEM_LONG);
176   }
177   mn102_write_byte(mn102, adr, val);
178   mn102_write_byte(mn102, adr+1, val>>8);
179   mn102_write_byte(mn102, adr+2, val>>16);
180}
181
182343static UINT32 do_add(mn102_info *mn102, UINT32 a, UINT32 b)
183344{
184345   UINT32 r24, r16;
r7640r7641
302463      mn102->psw |= 1;
303464}
304465
305INLINE void mn102_change_pc(mn102_info *mn102, UINT32 pc)
306{
307    mn102->pc = pc & 0xffffff;
308}
309
310466INLINE void do_jsr(mn102_info *mn102, UINT32 to, UINT32 ret)
311467{
312468   mn102_change_pc(mn102, to & 0xffffff);
r7640r7641
329485       psw & 0x0001 ? 'z' : '-');
330486#endif
331487
332void mn102_force_irq(mn102_info *mn102, int level, int group, int entry)
488// take an external IRQ
489static void mn102_extirq(mn102_info *mn102, int irqnum, int status)
333490{
334   if(!(mn102->psw & 0x800))
491   int level = (mn102->icrh[7]>>4)&0x7;
492
493//  printf("mn102_extirq: irq %d status %d G8 ICRL %x\n", irqnum, status, mn102->icrl[7]);
494
495   // if interrupt is enabled, handle it
496   if (status)
335497   {
336      if(group != 1 || entry != 3){
337         log_event("MN102", "Dropping irq %d %d %d, pc=%x, a3=%x", level, group, entry, mn102->pc, mn102->a[3]);
498      // indicate interrupt pending
499      mn102->icrl[7] |= (1 << (4 + irqnum));
500
501      // set interrupt detect = pending AND enable
502      mn102->icrl[7] |= (mn102->icrh[7]&0x0f) & (mn102->icrl[7]>>4);
503
504      // is the result enabled?
505      if (mn102->icrl[7] & (1 << irqnum))
506      {
507         // try to take it now
508         mn102_take_irq(mn102, level, 8);
338509      }
339      return;
340510   }
341
342   if(group != 1 || entry != 3) {
343      log_event("MN102", "Taking irq %d %d %d, pc=%x, a3=%x", level, group, entry, mn102->pc, mn102->a[3]);
344   }
345   mn102->a[3] -= 6;
346   w24(mn102, mn102->a[3]+2, mn102->pc);
347   mn102_write_word(mn102, mn102->a[3], mn102->psw);
348   mn102_change_pc(mn102, 0x80008);
349   mn102->psw = (mn102->psw & 0xf0ff) | (level << 8);
350   mn102->iagr = group << 1;
351   if(group != 0)
352      mn102->icrl[group-1] |= 1 << entry;
353511}
354512
355513static CPU_EXECUTE(mn10200)
r7640r7641
17151873    // Maskable irq control
17161874  case 0x042: case 0x044: case 0x046: case 0x048: case 0x04a:
17171875  case 0x04c: case 0x04e: case 0x050: case 0x052: case 0x054:
1718    mn102->icrl[((adr & 0x3f)>>1)-1] = data;
1876    {
1877       // note: writes here ack interrupts
1878   mn102->icrl[((adr & 0x3f)>>1)-1] = data;
1879    }
17191880    break;
17201881
17211882  case 0x043: case 0x045: case 0x047: case 0x049: case 0x04b:
17221883  case 0x04d: case 0x04f: case 0x051: case 0x053: case 0x055: {
17231884    int irq = ((adr & 0x3f)>>1)-1;
17241885    if((mn102->icrh[irq] != data) && (data & 15)) {
1725      log_event("MN102", "irq %d enabled, level=%x, enable= %s %s %s %s", irq+1, (data >> 4) & 7,
1886      printf("MN10200: irq %d enabled, level=%x, enable= %s %s %s %s\n", irq+1, (data >> 4) & 7,
17261887      data & 1 ? inames[irq][0] : "-",
17271888      data & 2 ? inames[irq][1] : "-",
17281889      data & 4 ? inames[irq][2] : "-",
17291890      data & 8 ? inames[irq][3] : "-");
17301891   }
17311892    if((mn102->icrh[irq] != data) && !(data & 15)) {
1732      log_event("MN102", "irq %d disabled", irq+1);
1893        printf("MN10200: irq %d disabled\n", irq+1);
17331894   }
17341895    mn102->icrh[irq] = data;
17351896    break;
r7640r7641
17831944    break;
17841945  }
17851946
1786  case 0x1a0:
1787    log_event("MN102", "AN %s timer7=%s /%d %s %s",
1788         data & 0x80 ? "on" : "off", data & 0x40 ? "on" : "off",
1789         1 << ((data >> 2) & 3), data & 2 ? "continuous" : "single", data & 1 ? "one" : "multi");
1790    break;
1947   case 0x1a0:
1948      log_event("MN102", "AN %s timer7=%s /%d %s %s",
1949         data & 0x80 ? "on" : "off", data & 0x40 ? "on" : "off",
1950         1 << ((data >> 2) & 3), data & 2 ? "continuous" : "single", data & 1 ? "one" : "multi");
1951      break;
17911952
1792  case 0x1a1:
1793    log_event("MN102", "AN chans=0-%d current=%d", (data >> 4) & 7, data & 7);
1794    break;
1953   case 0x1a1:
1954      log_event("MN102", "AN chans=0-%d current=%d", (data >> 4) & 7, data & 7);
1955      break;
17951956
1796  case 0x210: case 0x211: case 0x212: case 0x213: case 0x214:
1797  case 0x215: case 0x216: case 0x217: case 0x218: case 0x219:
1798    log_event("MN102", "Timer %d value set %02x", adr-0x210, data);
1799    break;
1957   case 0x210: case 0x211: case 0x212: case 0x213: case 0x214:
1958   case 0x215: case 0x216: case 0x217: case 0x218: case 0x219:
1959      mn102->simple_timer[adr-0x210].base = data + 1;
1960//      printf("MN10200: Timer %d value set %02x\n", adr-0x210, data);
1961      refresh_timer(mn102, adr-0x210);
1962      break;
18001963
1801  case 0x21a:
1802    log_event("MN102", "Prescale 0 cycle count %02x", data);
1803    break;
1964   case 0x21a:
1965      mn102->prescaler[0].cycles = data+1;
1966//      printf("MN10200: Prescale 0 cycle count %d\n", data+1);
1967      break;
18041968
1805  case 0x21b:
1806    log_event("MN102", "Prescale 1 cycle count %02x", data);
1807    break;
1969   case 0x21b:
1970      mn102->prescaler[1].cycles = data+1;
1971//      printf("MN10200: Prescale 1 cycle count %d\n", data+1);
1972      break;
18081973
1809  case 0x220: case 0x221: case 0x222: case 0x223: case 0x224:
1810  case 0x225: case 0x226: case 0x227: case 0x228: case 0x229: {
1811//    const char *source[4] = { "TMxIO", "cascade", "prescale 0", "prescale 1" };
1812//    log_event("MN102", "Timer %d %s b6=%d, source=%s", adr-0x220, data & 0x80 ? "on" : "off", (data & 0x40) != 0, source[data & 3]);
1813    break;
1814  }
1974   case 0x220: case 0x221: case 0x222: case 0x223: case 0x224:
1975   case 0x225: case 0x226: case 0x227: case 0x228: case 0x229:
1976   {
1977//      const char *source[4] = { "TMxIO", "cascade", "prescale 0", "prescale 1" };
1978      mn102->simple_timer[adr-0x220].mode = data;
1979//      printf("MN10200: Timer %d %s b6=%d, source=%s\n", adr-0x220, data & 0x80 ? "on" : "off", (data & 0x40) != 0, source[data & 3]);
18151980
1816  case 0x22a:
1817    log_event("MN102", "Prescale 0 %s, ps0bc %s",
1818         data & 0x80 ? "on" : "off", data & 0x40 ? "-> ps0br" : "off");
1819    break;
1981      if (data & 0x40)
1982      {
1983//          printf("MN10200: loading timer %d\n", adr-0x220);
1984         mn102->simple_timer[adr-0x220].cur = mn102->simple_timer[adr-0x220].base;
1985      }
1986      refresh_timer(mn102, adr-0x220);
1987      break;
1988   }
18201989
1821  case 0x22b:
1822    log_event("MN102", "Prescale 1 %s, ps1bc %s",
1823         data & 0x80 ? "on" : "off", data & 0x40 ? "-> ps1br" : "off");
1824    break;
1990   case 0x22a:
1991//      printf("MN10200: Prescale 0 %s, ps0bc %s\n",
1992//          data & 0x80 ? "on" : "off", data & 0x40 ? "-> ps0br" : "off");
1993      mn102->prescaler[0].mode = data;
1994      break;
18251995
1826  case 0x230: case 0x240: case 0x250: {
1827//    const char *modes[4] = { "single", "double", "ioa", "iob" };
1828//    const char *sources[8] = { "pres.0", "pres.1", "iob", "sysclk", "*4", "*1", "6", "7" };
1829//    log_event("MN102", "Timer %d comp=%s on_1=%s on_match=%s phase=%s source=%s",
1830//        10 + ((adr-0x230) >> 4),
1831//        modes[data >> 6], data & 0x20 ? "cleared" : "not cleared",  data & 0x10 ? "cleared" : "not cleared",
1832//        data & 8 ? "tff" : "rsff", sources[data & 7]);
1833    break;
1834  }
1996   case 0x22b:
1997//      printf("MN10200: Prescale 1 %s, ps1bc %s\n",
1998//          data & 0x80 ? "on" : "off", data & 0x40 ? "-> ps1br" : "off");
1999      mn102->prescaler[1].mode = data;
2000      break;
18352001
1836  case 0x231: case 0x241: case 0x251: {
1837//    const char *modes[4] = { "up", "down", "up on ioa", "up on iob" };
1838//    log_event("MN102", "Timer %d %s ff=%s op=%s ext_trig=%s %s",
1839//        10 + ((adr-0x230) >> 4),
1840//        data & 0x80 ? "enable" : "disable", data & 0x40 ? "operate" : "clear",
1841//        modes[(data >> 4) & 3], data & 2 ? "on" : "off", data & 1 ? "one-shot" : "repeat");
2002   case 0x230: case 0x240: case 0x250:
2003   {
2004//      const char *modes[4] = { "single", "double", "ioa", "iob" };
2005//      const char *sources[8] = { "pres.0", "pres.1", "iob", "sysclk", "*4", "*1", "6", "7" };
2006//      printf("MN10200: Timer %d comp=%s on_1=%s on_match=%s phase=%s source=%s\n",
2007//          10 + ((adr-0x230) >> 4),
2008//          modes[data >> 6], data & 0x20 ? "cleared" : "not cleared",  data & 0x10 ? "cleared" : "not cleared",
2009//          data & 8 ? "tff" : "rsff", sources[data & 7]);
2010      break;
2011   }
18422012
1843    break;
1844  }
2013   case 0x231: case 0x241: case 0x251:
2014   {
2015//      const char *modes[4] = { "up", "down", "up on ioa", "up on iob" };
2016//      printf("MN10200: Timer %d %s ff=%s op=%s ext_trig=%s %s\n",
2017//      10 + ((adr-0x230) >> 4),
2018//      data & 0x80 ? "enable" : "disable", data & 0x40 ? "operate" : "clear",
2019//      modes[(data >> 4) & 3], data & 2 ? "on" : "off", data & 1 ? "one-shot" : "repeat");
18452020
2021      break;
2022   }
2023
18462024  case 0x234: case 0x244: case 0x254:
18472025    log_event("MN102", "Timer %d ca=--%02x", 10 + ((adr-0x230) >> 4), data);
18482026    break;
r7640r7641
18912069  case 0x280: case 0x290: case 0x2a0: case 0x2b0: case 0x2c0: case 0x2d0: case 0x2e0: case 0x2f0: {
18922070    int dma = (adr-0x280) >> 4;
18932071    mn102->dma[dma].adr = (mn102->dma[dma].adr & 0x00ffff00) | data;
1894    log_event("MN102", "DMA %d adr=%06x", dma, mn102->dma[dma].adr);
2072    logerror("MN10200: DMA %d adr=%06x\n", dma, mn102->dma[dma].adr);
18952073    break;
18962074  }
18972075
18982076  case 0x281: case 0x291: case 0x2a1: case 0x2b1: case 0x2c1: case 0x2d1: case 0x2e1: case 0x2f1: {
18992077    int dma = (adr-0x280) >> 4;
19002078    mn102->dma[dma].adr = (mn102->dma[dma].adr & 0x00ff00ff) | (data << 8);
1901    log_event("MN102", "DMA %d adr=%06x", dma, mn102->dma[dma].adr);
2079    logerror("MN10200: DMA %d adr=%06x\n", dma, mn102->dma[dma].adr);
19022080    break;
19032081  }
19042082
19052083  case 0x282: case 0x292: case 0x2a2: case 0x2b2: case 0x2c2: case 0x2d2: case 0x2e2: case 0x2f2: {
19062084    int dma = (adr-0x280) >> 4;
19072085    mn102->dma[dma].adr = (mn102->dma[dma].adr & 0x0000ffff) | (data << 16);
1908    log_event("MN102", "DMA %d adr=%06x", dma, mn102->dma[dma].adr);
2086    logerror("MN10200: DMA %d adr=%06x\n", dma, mn102->dma[dma].adr);
19092087    break;
19102088  }
19112089
r7640r7641
19152093  case 0x284: case 0x294: case 0x2a4: case 0x2b4: case 0x2c4: case 0x2d4: case 0x2e4: case 0x2f4: {
19162094    int dma = (adr-0x280) >> 4;
19172095    mn102->dma[dma].count = (mn102->dma[dma].count & 0x00ffff00) | data;
1918    log_event("MN102", "DMA %d count=%06x", dma, mn102->dma[dma].count);
2096    logerror("MN10200: DMA %d count=%06x\n", dma, mn102->dma[dma].count);
19192097    break;
19202098  }
19212099
19222100  case 0x285: case 0x295: case 0x2a5: case 0x2b5: case 0x2c5: case 0x2d5: case 0x2e5: case 0x2f5: {
19232101    int dma = (adr-0x280) >> 4;
19242102    mn102->dma[dma].count = (mn102->dma[dma].count & 0x00ff00ff) | (data << 8);
1925    log_event("MN102", "DMA %d count=%06x", dma, mn102->dma[dma].count);
2103    logerror("MN10200: DMA %d count=%06x\n", dma, mn102->dma[dma].count);
19262104    break;
19272105  }
19282106
19292107  case 0x286: case 0x296: case 0x2a6: case 0x2b6: case 0x2c6: case 0x2d6: case 0x2e6: case 0x2f6: {
19302108    int dma = (adr-0x280) >> 4;
19312109    mn102->dma[dma].count = (mn102->dma[dma].count & 0x0000ffff) | (data << 16);
1932    log_event("MN102", "DMA %d count=%06x", dma, mn102->dma[dma].count);
2110    logerror("MN10200: DMA %d count=%06x\n", dma, mn102->dma[dma].count);
19332111    break;
19342112  }
19352113
r7640r7641
19392117  case 0x288: case 0x298: case 0x2a8: case 0x2b8: case 0x2c8: case 0x2d8: case 0x2e8: case 0x2f8: {
19402118    int dma = (adr-0x280) >> 4;
19412119    mn102->dma[dma].iadr = (mn102->dma[dma].iadr & 0xff00) | data;
1942    log_event("MN102", "DMA %d iadr=%03x", dma, mn102->dma[dma].iadr);
2120    logerror("MN10200: DMA %d iadr=%03x\n", dma, mn102->dma[dma].iadr);
19432121    break;
19442122  }
19452123
19462124  case 0x289: case 0x299: case 0x2a9: case 0x2b9: case 0x2c9: case 0x2d9: case 0x2e9: case 0x2f9: {
19472125    int dma = (adr-0x280) >> 4;
19482126    mn102->dma[dma].iadr = (mn102->dma[dma].iadr & 0x00ff) | ((data & 3) << 8);
1949    log_event("MN102", "DMA %d iadr=%03x", dma, mn102->dma[dma].iadr);
2127    logerror("MN10200: DMA %d iadr=%03x\n", dma, mn102->dma[dma].iadr);
19502128    break;
19512129  }
19522130
19532131  case 0x28a: case 0x29a: case 0x2aa: case 0x2ba: case 0x2ca: case 0x2da: case 0x2ea: case 0x2fa: {
1954/*    static const char *trans[4] = { "M-IO", "M-M", "M-X1", "m-X2" };
2132    static const char *trans[4] = { "M-IO", "M-M", "M-X1", "m-X2" };
19552133    static const char *start[32] = {
19562134      "soft", "a/d", "ser0tx", "set0rx", "ser1tx", "ser1rx",
19572135      "timer0", "timer1", "timer2", "timer3", "timer4", "timer5", "timer6", "timer7", "timer8", "timer9",
r7640r7641
19602138      "timer12a", "timer12b",
19612139      "irq0", "irq1", "irq2", "irq3",
19622140      "X0e", "X1e", "X0l", "X1l"
1963    }; */
2141    };
19642142
19652143    int dma = (adr-0x280) >> 4;
19662144    mn102->dma[dma].ctrll = data;
1967    log_event("MN102", "DMA %d control ack=%s, trans=%s, start=%s",
2145    logerror("MN10200: DMA %d control ack=%s, trans=%s, start=%s\n",
19682146         dma,
19692147         data & 0x80 ? "level" : "pulse",
19702148         trans[(data >> 5) & 3],
r7640r7641
19732151  }
19742152
19752153  case 0x28b: case 0x29b: case 0x2ab: case 0x2bb: case 0x2cb: case 0x2db: case 0x2eb: case 0x2fb: {
1976//    static const char *tradr[4] = { "inc", "dec", "fixed", "reserved" };
2154    static const char *tradr[4] = { "inc", "dec", "fixed", "reserved" };
19772155    int dma = (adr-0x280) >> 4;
19782156    mn102->dma[dma].ctrlh = data;
1979/*    log_event("MN102", "DMA %d control %s irq=%s %s %s dir=%s %s %s",
2157   logerror("MN10200: DMA %d control %s irq=%s %s %s dir=%s %s %s\n",
19802158          dma,
19812159          data & 0x80 ? "enable" : "disable",
19822160          data & 0x40 ? "off" : "on",
r7640r7641
19842162          data & 0x10 ? "burst" : "single",
19852163          data & 0x08 ? "dst" : "src",
19862164          data & 0x04 ? "continue" : "normal",
1987          tradr[data & 3]);*/
2165          tradr[data & 3]);
19882166    break;
19892167  }
19902168
19912169  case 0x28c: case 0x29c: case 0x2ac: case 0x2bc: case 0x2cc: case 0x2dc: case 0x2ec: case 0x2fc: {
19922170    int dma = (adr-0x280) >> 4;
19932171    mn102->dma[dma].irq = data & 7;
1994    log_event("MN102", "DMA %d irq=%d", dma, data & 7);
2172    logerror("MN10200: DMA %d irq=%d\n", dma, data & 7);
19952173    break;
19962174  }
19972175
r7640r7641
20842262
20852263static UINT32 mn10200_r(mn102_info *mn102, UINT32 adr, int type)
20862264{
2087  if(type == MEM_WORD)
2088    return mn10200_r(mn102, adr, MEM_BYTE) | (mn10200_r(mn102, adr+1, MEM_BYTE) << 8);
2265   if(type == MEM_WORD)
2266   {
2267      return mn10200_r(mn102, adr, MEM_BYTE) | (mn10200_r(mn102, adr+1, MEM_BYTE) << 8);
2268   }
20892269
20902270  switch(adr) {
20912271  case 0x00e:
r7640r7641
21202300    return zz++;
21212301  }
21222302
2123  case 0x183:
2124    return 0x10;
2303   case 0x183:
2304      return 0x10;
21252305
2126  case 0x200: case 0x201: case 0x202: case 0x203: case 0x204:
2127  case 0x205: case 0x206: case 0x207: case 0x208: case 0x209:
2128    log_event("MN102", "timer %d value read", adr-0x200);
2129    break;
2306   case 0x200: case 0x201: case 0x202: case 0x203: case 0x204:
2307   case 0x205: case 0x206: case 0x207: case 0x208: case 0x209:
2308//      printf("MN10200: timer %d value read = %d\n", adr-0x200, mn102->simple_timer[adr-0x200].cur);
2309      return mn102->simple_timer[adr-0x200].cur;
2310      break;
21302311
21312312   case 0x264:   // port 1 data
21322313      return memory_read_byte_8le(mn102->io, MN10200_PORT1);
21332314
2315   case 0x28c: case 0x29c: case 0x2ac: case 0x2bc: case 0x2cc: case 0x2dc: case 0x2ec: case 0x2fc:
2316      {
2317         int dma = (adr-0x280) >> 4;
2318         return mn102->dma[dma].irq;
2319      }
2320
21342321   case 0x3c0:   // port 0 data
21352322      return memory_read_byte_8le(mn102->io, MN10200_PORT0);
21362323
r7640r7641
21682355      case CPUINFO_INT_REGISTER + MN10200_A3:            cpustate->a[3] = info->i;   break;
21692356      case CPUINFO_INT_REGISTER + MN10200_NMICR:         cpustate->nmicr = info->i;   break;
21702357      case CPUINFO_INT_REGISTER + MN10200_IAGR:          cpustate->iagr = info->i;   break;
2358
2359      case CPUINFO_INT_INPUT_STATE + MN10200_IRQ0:   mn102_extirq(cpustate, 0, info->i);   break;
2360      case CPUINFO_INT_INPUT_STATE + MN10200_IRQ1:   mn102_extirq(cpustate, 1, info->i);   break;
2361      case CPUINFO_INT_INPUT_STATE + MN10200_IRQ2:   mn102_extirq(cpustate, 2, info->i);   break;
2362      case CPUINFO_INT_INPUT_STATE + MN10200_IRQ3:   mn102_extirq(cpustate, 3, info->i);   break;
21712363   }
21722364}
21732365
r7640r7641
22372429
22382430      case CPUINFO_STR_REGISTER + MN10200_MDR:           sprintf(info->s, "MDR:  %04x", cpustate->mdr); break;
22392431
2240      case CPUINFO_STR_REGISTER + MN10200_D0:            sprintf(info->s, "D0:  %08x", cpustate->d[0]); break;
2241      case CPUINFO_STR_REGISTER + MN10200_D1:            sprintf(info->s, "D1:  %08x", cpustate->d[1]); break;
2242      case CPUINFO_STR_REGISTER + MN10200_D2:            sprintf(info->s, "D2:  %08x", cpustate->d[2]); break;
2243      case CPUINFO_STR_REGISTER + MN10200_D3:            sprintf(info->s, "D3:  %08x", cpustate->d[3]); break;
2244      case CPUINFO_STR_REGISTER + MN10200_A0:            sprintf(info->s, "A0:  %08x", cpustate->a[0]); break;
2245      case CPUINFO_STR_REGISTER + MN10200_A1:            sprintf(info->s, "A1:  %08x", cpustate->a[1]); break;
2246      case CPUINFO_STR_REGISTER + MN10200_A2:            sprintf(info->s, "A2:  %08x", cpustate->a[2]); break;
2247      case CPUINFO_STR_REGISTER + MN10200_A3:            sprintf(info->s, "A3:  %08x", cpustate->a[3]); break;
2432      case CPUINFO_STR_REGISTER + MN10200_D0:            sprintf(info->s, "D0: %06x", cpustate->d[0]); break;
2433      case CPUINFO_STR_REGISTER + MN10200_D1:            sprintf(info->s, "D1: %06x", cpustate->d[1]); break;
2434      case CPUINFO_STR_REGISTER + MN10200_D2:            sprintf(info->s, "D2: %06x", cpustate->d[2]); break;
2435      case CPUINFO_STR_REGISTER + MN10200_D3:            sprintf(info->s, "D3: %06x", cpustate->d[3]); break;
2436      case CPUINFO_STR_REGISTER + MN10200_A0:            sprintf(info->s, "A0: %06x", cpustate->a[0]); break;
2437      case CPUINFO_STR_REGISTER + MN10200_A1:            sprintf(info->s, "A1: %06x", cpustate->a[1]); break;
2438      case CPUINFO_STR_REGISTER + MN10200_A2:            sprintf(info->s, "A2: %06x", cpustate->a[2]); break;
2439      case CPUINFO_STR_REGISTER + MN10200_A3:            sprintf(info->s, "A3: %06x", cpustate->a[3]); break;
22482440
22492441      case CPUINFO_STR_REGISTER + MN10200_NMICR:         sprintf(info->s, "MNICR:  %02x", cpustate->nmicr); break;
22502442      case CPUINFO_STR_REGISTER + MN10200_IAGR:          sprintf(info->s, "IAGR:  %02x", cpustate->iagr); break;
src/emu/cpu/g65816/g65816op.h
r7640r7641
688688         r0 = REGISTER_A;   \
689689         r1 = SRC;      \
690690         carry = CFLAG_AS_1();   \
691         if (!FLAG_D)    \
691         if (!FLAG_D)   \
692692         {   \
693693            result = r0 + r1 + carry;   \
694         }    \
695         else    \
694         }   \
695         else   \
696696         {   \
697697            result = (r0 & 0x000f) + (r1 & 0x000f) + (carry <<  0);   \
698698            if(result > 0x0009) result += 0x0006;   \
r7640r7641
710710         if (FLAG_D && result > 0x9fff) result += 0x6000;   \
711711         FLAG_C = (result > 0xffff) ? 0x100 : 0;   \
712712         FLAG_Z = REGISTER_A = MAKE_UINT_16(result);         \
713         FLAG_N = NFLAG_16(REGISTER_A);                       
713         FLAG_N = NFLAG_16(REGISTER_A);
714714#endif
715715
716716/* M6502   Logical AND with accumulator */
r7640r7641
15481548         r1 = SRC;      \
15491549         r1 ^= 0xffff;      \
15501550         carry = CFLAG_AS_1();   \
1551         if (!FLAG_D)    \
1551         if (!FLAG_D)   \
15521552         {   \
15531553            result = r0 + r1 + carry;   \
1554         }    \
1555         else    \
1554         }   \
1555         else   \
15561556         {   \
15571557            result = (r0 & 0x000f) + (r1 & 0x000f) + (carry <<  0);   \
15581558            if(result <= 0x000f) result -= 0x0006;   \
r7640r7641
15701570         if (FLAG_D && result <= 0xffff) result -= 0x6000;   \
15711571         FLAG_C = (result > 0xffff) ? 0x100 : 0;   \
15721572         FLAG_Z = REGISTER_A = MAKE_UINT_16(result);         \
1573         FLAG_N = NFLAG_16(REGISTER_A);                       
1573         FLAG_N = NFLAG_16(REGISTER_A);
15741574#endif
15751575
15761576
src/emu/cpu/m6800/m6800.c
r7640r7641
605605   {
606606      if( cpustate->irq_state[M6800_IRQ_LINE] != CLEAR_LINE )
607607      {   /* standard IRQ */
608         enter_interrupt(cpustate, "M6800 '%s' take IRQ1n",0xfff8);
608         enter_interrupt(cpustate, "M6800 '%s' take IRQ1\n",0xfff8);
609609         if( cpustate->irq_callback )
610610            (void)(*cpustate->irq_callback)(cpustate->device, M6800_IRQ_LINE);
611611      }
src/emu/video/rgbvmx.h
r7640r7641
1212#ifndef __RGBVMX__
1313#define __RGBVMX__
1414
15#ifndef __APPLE_ALTIVEC__
15#if defined(__ALTIVEC__)
1616#include <altivec.h>
1717#endif
1818
src/emu/video/rgbutil.c
r7640r7641
164164***************************************************************************/
165165
166166#if defined(__ALTIVEC__)
167#include <altivec.h>
167168const struct _rgbvmx_statics rgbvmx_statics =
168169{
169170   { 255, 255, 255, 255, 255, 255, 255, 255 },
src/emu/tilemap.c
r7640r7641
450450   tmap->enable = (enable != 0);
451451}
452452
453/*-------------------------------------------------
454    tilemap_get_scrolldx - return the enable flag
455    for the tilemap
456-------------------------------------------------*/
453457
458int tilemap_get_enable(tilemap_t *tmap)
459{
460   return tmap->enable;
461}
462
463
454464/*-------------------------------------------------
455465    tilemap_set_flip - set a global flip for the
456466    tilemap
src/emu/tilemap.h
r7640r7641
439439/* set an enable flag for the tilemap; if 0, requests to draw the tilemap are ignored */
440440void tilemap_set_enable(tilemap_t *tmap, int enable);
441441
442/* return enable flag for the tilemap */
443int tilemap_get_enable(tilemap_t *tmap);
444
442445/* set a global flip for the tilemap */
443446void tilemap_set_flip(tilemap_t *tmap, UINT32 attributes);
444447
src/emu/inptport.c
r7640r7641
47054705int input_machine_has_keyboard(running_machine *machine)
47064706{
47074707   int have_keyboard = FALSE;
4708#ifdef MESS   
4708#ifdef MESS
47094709   const input_field_config *field;
47104710   const input_port_config *port;
47114711   for (port = machine->portlist.first(); port != NULL; port = port->next)
r7640r7641
47174717            break;
47184718      }
47194719   }
4720#endif   
4720#endif
47214721   return have_keyboard;
47224722}
47234723
src/emu/rendlay.c
r7640r7641
562562         int effy = bounds->min_y + y;
563563         if (effy >= bounds->min_y && effy <= bounds->max_y)
564564         {
565            UINT32 *s = BITMAP_ADDR32(tempbitmap, y, 0);
565            UINT32 *src = BITMAP_ADDR32(tempbitmap, y, 0);
566566            UINT32 *d = BITMAP_ADDR32(dest, effy, 0);
567567            for (x = 0; x < chbounds.max_x - chbounds.min_x; x++)
568568            {
569569               int effx = curx + x + chbounds.min_x;
570570               if (effx >= bounds->min_x && effx <= bounds->max_x)
571571               {
572                  UINT32 spix = RGB_ALPHA(s[x]);
572                  UINT32 spix = RGB_ALPHA(src[x]);
573573                  if (spix != 0)
574574                  {
575575                     UINT32 dpix = d[effx];
r7640r7641
15951595   for (compnode = elemnode->child; compnode; compnode = compnode->next)
15961596   {
15971597      /* allocate a new component */
1598      element_component *component = load_element_component(config, compnode, dirname);
1599      if (component == NULL)
1598      element_component *new_component = load_element_component(config, compnode, dirname);
1599      if (new_component == NULL)
16001600         goto error;
16011601
16021602      /* link it into the list */
1603      *nextcomp = component;
1604      nextcomp = &component->next;
1603      *nextcomp = new_component;
1604      nextcomp = &new_component->next;
16051605
16061606      /* accumulate bounds */
16071607      if (first)
1608         bounds = component->bounds;
1608         bounds = new_component->bounds;
16091609      else
1610         union_render_bounds(&bounds, &component->bounds);
1610         union_render_bounds(&bounds, &new_component->bounds);
16111611      first = FALSE;
16121612
16131613      /* determine the maximum state */
1614      if (component->state > element->maxstate)
1615         element->maxstate = component->state;
1616      if (component->type == COMPONENT_TYPE_LED7SEG)
1614      if (new_component->state > element->maxstate)
1615         element->maxstate = new_component->state;
1616      if (new_component->type == COMPONENT_TYPE_LED7SEG)
16171617         element->maxstate = 255;
1618      if (component->type == COMPONENT_TYPE_LED14SEG)
1618      if (new_component->type == COMPONENT_TYPE_LED14SEG)
16191619         element->maxstate = 16383;
1620      if (component->type == COMPONENT_TYPE_LED14SEGSC || component->type == COMPONENT_TYPE_LED16SEG)
1620      if (new_component->type == COMPONENT_TYPE_LED14SEGSC || new_component->type == COMPONENT_TYPE_LED16SEG)
16211621         element->maxstate = 65535;
1622      if (component->type == COMPONENT_TYPE_LED16SEGSC)
1622      if (new_component->type == COMPONENT_TYPE_LED16SEGSC)
16231623         element->maxstate = 262143;
16241624   }
16251625
src/emu/output.c
r7640r7641
186186         /* remove all notifiers */
187187         for (notify = item->notifylist; notify != NULL; )
188188         {
189            output_notify *next = notify->next;
189            output_notify *next_notify = notify->next;
190190            global_free(notify);
191            notify = next;
191            notify = next_notify;
192192         }
193193
194194         /* free the name and the item */
src/emu/sound/tms5110.c
r7640r7641
7373#define SUBTYPE_TMS5100         1
7474#define SUBTYPE_M58817         2
7575#define SUBTYPE_TMS5110         4
76#define SUBTYPE_TMS5200         8
77#define SUBTYPE_TMS5220         16
78#define SUBTYPE_TMS5220C      32
7679#define FIFO_SIZE            64
7780#define MAX_CHIRP_SIZE         51
7881
r7640r7641
763766
764767static void parse_frame(tms5110_state *tms)
765768{
766   int bits, indx, i, rep_flag, ene;
769   int bits, indx, i, rep_flag;
770#if (DEBUG_5110)
771   int ene;
772#endif
767773
768
769774   /* count the total number of bits available */
770775   bits = tms->fifo_count;
771776
r7640r7641
779784   }
780785   indx = extract_bits(tms,tms->coeff->energy_bits);
781786   tms->new_energy = tms->coeff->energytable[indx];
787#if (DEBUG_5110)
782788   ene = indx;
789#endif
783790
784791   /* if the energy index is 0 or 15, we're done */
785792
src/emu/sound/votrax.c
r7640r7641
3535   UINT32      frac;
3636   UINT32      step;
3737
38   struct  loaded_samples *samples;
38   loaded_samples *samples;
3939};
4040
4141INLINE votrax_state *get_safe_token(running_device *device)
r7640r7641
7171
7272static STREAM_UPDATE( votrax_update_sound )
7373{
74   votrax_state *info = param;
74   votrax_state *info = (votrax_state*) param;
7575   stream_sample_t *buffer = outputs[0];
7676
7777   if (info->sample)
src/emu/sound/tms5110r.c
r7640r7641
3232 * { 3, 3, 3, 2, 2, 2, 1, 0 }
3333 */
3434
35 /* quick note on derivative analysis:
36 Judging by all the TI chips I (Lord Nightmare) have done this test on, the first derivative between successive values of the LPC tables should follow a roughly triangular or sine shaped curve, the second derivative should start at a value, increase slightly, then decrease smoothly and become negative right around where the LPC curve passes 0, finally increase slightly right near the end. If it doesn't do this, there is probably a wrong value in there somewhere. The pitch and energy tables follow similar patterns but aren't the same since they never cross 0. The chirp table doesn't follow this pattern at all.
37 */
38
39 /* The following TMS5100/TMC0280/CD2801 coefficients come from US Patent 4,209,836 and several others, and have been verified using derivative analysis to show which values were bad (due to poor quality images or badly typed copies of the tables in the patents, depending on which patent you look at) which were then corrected by figuring out what the tiny remaining marks on the photocopied version of the coefficient sheet COULD have been which would make the derivatives play nice.
40***These values have not yet been verified against a real TMS5100 or TMC0280 or CD2801 (from speak & spell, etc)***
41*/
3542static const struct tms5100_coeffs pat4209836_coeff =
3643{
3744   /* subtype */
r7640r7641
4148   5,
4249   { 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
4350   /* E   */
44   { 0, 0, 1, 1, 2, 3, 5, 7, 10, 15, 21, 30, 43, 61, 86, 511 },/* correct value of last number is really 0 */
45   /* P   */
51   { 0, 0, 1, 1, 2, 3, 5, 7, 10, 15, 21, 30, 43, 61, 86, 511 }, /* last value is actually 0 in ROM, but 511 is stop sentinel */
52   /* P   note: value #20 may be 95; value #29 may be 140 */
4653   {   0,  41,  43,  45,  47,  49,  51,  53,
4754      55,  58,  60,  63,  66,  70,  73,  76,
4855      79,  83,  87,  90,  94,  99, 103, 107,
r7640r7641
8087      /* K10 */
8188      { -179, -122,  -61,    1,   63,  123, 179, 231 },
8289   },
83   /* Chirptable */
90   /* Chirp table */
8491   {   0,  42, -44, 50, -78, 18, 37, 20,
8592       2, -31, -59,  2,  95, 90,  5, 15,
8693      38, -4,  -91,-91, -42,-35,-36, -4,
r7640r7641
9299   { 3, 3, 3, 2, 2, 2, 1, 0 }
93100};
94101
95/*
96 * This table is from patent 4403965
97 * also listed in 4331836
98 * also listed in 4946391
99 *
100 * Works best with M58817 ...
101 */
102
102/* The following CD2802 coefficients come from US Patents 4,403,965 and 4,946,391; They have not yet been verified using derivatives. The M58817 seems to work best with these coefficients, so its possible the engineers of that chip copied them from the TI patents.
103***These values have not yet been verified against a real CD2802 (used in touch & tell)***
104*/
103105static const struct tms5100_coeffs pat4403965_coeff =
104106{
105107   /* subtype */
r7640r7641
155157      -190,-133,-73,-10,53,115,173,227,
156158      },
157159   },
158   /* Chirptable */
160   /* Chirp table */
159161   { 0,43,-44,51,-77,18,37,20,
160162   2,-30,-58,3,96,91,5,15,
161163   38,-4,-90,-91,-42,-35,-35,-3,
r7640r7641
168170   { 3, 3, 3, 2, 2, 2, 1, 0 }
169171};
170172
171
172/* Note: the following tables in this file were read from the real TMS5110A chip, except
173         for the chirptable and the interp_coeff
173/* The following TMS5110A LPC coefficients were read from an actual chip by Jarek Burczynski using the PROMOUT pin, and can be regarded as established fact. However, the chirp table and the interpolation coefficients still came from the patents as there doesn't seem to be an easy way to read those out from the chip without decapping it.
174174*/
175
176
177175static const struct tms5100_coeffs tms5110a_coeff =
178176{
179177   /* subtype */
r7640r7641
183181   5,
184182   { 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
185183   /* E   */
186   { 0,   1,   2,   3, 4,   6,   8,   11,
184   { 0,   1,   2,   3, 4,   6,   8,   11,
187185    16,  23,  33,  47, 63,  85,  114, 511 },
188186   /* P   */
189187   { 0,   15,  16,  17, 19,  21,  22,  25,
r7640r7641
223221      /* K10 */
224222      { -205, -132,  -59,   14,  87,  160,  234,  307  },
225223   },
226   /* Chirptable */
224   /* Chirp table */
227225   {   0,  42, -44, 50, -78, 18, 37, 20,
228226       2, -31, -59,  2,  95, 90,  5, 15,
229227      38, -4,  -91,-91, -42,-35,-36, -4,
r7640r7641
235233   { 3, 3, 3, 2, 2, 2, 1, 0 }
236234};
237235
236/* The following TMS5200/TMC0285 coefficients come from US Patent 4,335,277 and 4,581,757. However, the K10 row of coefficients are entirely missing from both of those patents.
237***These values have not yet been verified against a real TMS5200 or TMC0285***
238*/
239   // k* is followed by d if done transcription, c if checked for derivative aberrations
240static const struct tms5100_coeffs tms5200_coeff =
241{
242   /* subtype */
243   SUBTYPE_TMS5200,
244   10,
245   4,
246   6,
247   { 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
248   /* Ed   */
249   { 0,   1,   2,   3,   4,   6,   8,   11,
250    16,  23,  33,  47,  63,  85,  114, 511 }, /* last value is actually 0 in ROM, but 511 is stop sentinel */
251   /* Pd   */
252   { 0,  14,  15,  16,  17,  18,  19,  20,
253    21,  22,  23,  24,  25,  26,  27,  28,
254    29,  30,  31,  32,  34,  36,  38,  40,
255    41,  43,  45,  48,  49,  51,  54,  55,
256    57,  60,  62,  64,  68,  72,  74,  76,
257    81,  85,  87,  90,  96,  99, 103, 107,
258   112, 117, 122, 127, 133, 139, 145, 151,
259   157, 164, 171, 178, 186, 194, 202, 211 },
260   {
261      /* K1dc  */
262      { -507, -505, -503, -501, -497, -493, -488, -481,
263        -473, -463, -450, -434, -414, -390, -362, -328,
264        -288, -242, -191, -135,  -75,  -13,   49,  110,
265         168,  221,  269,  311,  348,  379,  404,  426 },
266      /* K2dc  */
267      { -294, -266, -235, -202, -167, -130,  -92,  -52,
268         -12,   28,   68,  108,  145,  182,  216,  248,
269         278,  305,  330,  352,  372,  390,  406,  420,
270         432,  443,  453,  461,  468,  474,  479,  486 },
271      /* K3dc  */
272      { -449, -432, -411, -385, -354, -317, -273, -223,
273        -167, -107,  -43,   22,   87,  148,  206,  258 },
274      /* K4dc (first 4-5 values are probably wrong but close) */
275      { -321, -270, -220, -157,  -97,  -40,   25,   89,
276         150,  207,  259,  304,  343,  376,  403,  425 },
277      /* K5dc  */
278      { -373, -347, -318, -284, -247, -206, -162, -115,
279         -65,  -15,   36,   86,  135,  181,  224,  263 },
280      /* K6dc  */
281      { -213, -176, -137,  -96,  -54,  -11,   33,   75,
282         117,  157,  195,  231,  264,  294,  322,  347 },
283      /* K7dc  */
284      { -294, -264, -232, -198, -161, -122,  -82,  -41,
285           1,   43,   84,  125,  163,  200,  234,  266 },
286      /* K8dc  */
287      { -195, -117,  -32,   54,  137,  213,  279,  335 },
288      /* K9dc  */
289      { -122,  -55,   15,   83, 149,  210,  264,  311  },
290      /* K10  - this was entirely missing from the patent, and I've simply copied the TMS5220 one, which is wrong */
291      { -205, -132,  -59,   14,  87,  160,  234,  307  },
292   },
293   /* Chirp table */
294   {   0,  42, -44, 50, -78, 18, 37, 20,
295       2, -31, -59,  2,  95, 90,  5, 15,
296      38, -4,  -91,-91, -42,-35,-36, -4,
297       37, 43,   34, 33,  15, -1, -8,-18,
298     -19,-17,   -9,-10,  -6,  0,  3,  2,
299       1,  0,    0,  0,   0,  0,  0,  0,
300       0,  0,    0 },
301   /* interpolation coefficients */
302   { 3, 3, 3, 2, 2, 2, 1, 0 }
303};
238304
305/* The following TMS5220 coefficients come from the datasheet, and its addendum, with the exception of the energy table. The energy table is copied from the TMS5110a dump and the TMS5200 patent (which are both the same for energy), as the datasheet lists it in RMS notation which doesn't help us since I(Lord Nightmare) can't figure out the proper formula TI used for converting energy to RMS (the obvious 'take all the values in the chirp ROM, multiply them by 1/2/3/4/etc, square each one, sum them up, divide by 51, which is # of ROM entries in chirp ROM, and take the square root of the result', doesn't QUITE work. It almost does, if you add 16 to the result, for the first 4 entries, but beyond that the entries become farther and farther offset).
306Note that all the LPC K* values match the TMS5110a table exactly.
307***These values have not yet been verified against a real TMS5220***
308*/
309static const struct tms5100_coeffs tms5220_coeff =
310{
311   /* subtype */
312   SUBTYPE_TMS5220,
313   10,
314   4,
315   6,
316   { 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
317   /* E   */
318   { 0,   1,   2,   3,   4,   6,   8,   11,
319    16,  23,  33,  47,  63,  85,  114, 511 }, /* last value is actually 0 in ROM, but 511 is stop sentinel */
320   /* P   */
321   { 0,  15,  16,  17,  18,  19,  20,  21,
322    22,  23,  24,  25,  26,  27,  28,  29,
323    30,  31,  32,  33,  34,  35,  36,  37,
324    38,  39,  40,  41,  42,  44,  46,  48,
325    50,  52,  53,  56,  58,  60,  62,  65,
326    68,  70,  72,  76,  78,  80,  84,  86,
327    91,  94,  98, 101, 105, 109, 114, 118,
328   122, 127, 132, 137, 142, 148, 153, 159 },
329   {
330      /* K1  */
331      { -501, -498, -497, -495, -493, -491, -488, -482,
332        -478, -474, -469, -464, -459, -452, -445, -437,
333        -412, -380, -339, -288, -227, -158,  -81,   -1,
334          80,  157,  226,  287,  337,  379,  411,  436 },
335      /* K2  */
336      { -328, -303, -274, -244, -211, -175, -138,  -99,
337         -59,  -18,   24,   64,  105,  143,  180,  215,
338         248,  278,  306,  331,  354,  374,  392,  408,
339         422,  435,  445,  455,  463,  470,  476,  506 },
340      /* K3  */
341      { -441, -387, -333, -279, -225, -171, -117,  -63,
342          -9,   45,   98,  152,  206,  260,  314,  368 },
343      /* K4  */
344      { -328, -273, -217, -161, -106,  -50,    5,   61,
345         116,  172,  228,  283,  339,  394,  450,  506  },
346      /* K5  */
347      { -328, -282, -235, -189, -142,  -96,  -50,   -3,
348          43,   90,  136,  182,  229,  275,  322,  368  },
349      /* K6  */
350      { -256, -212, -168, -123,  -79,  -35,   10,   54,
351          98,  143,  187,  232,  276,  320,  365,  409 },
352      /* K7  */
353      { -308, -260, -212, -164, -117,  -69,  -21,   27,
354          75,  122,  170,  218,  266,  314,  361,  409  },
355      /* K8  */
356      { -256, -161,  -66,   29,  124,  219,  314,  409  },
357      /* K9  */
358      { -256, -176,  -96,  -15,  65,  146,  226,  307  },
359      /* K10 */
360      { -205, -132,  -59,   14,  87,  160,  234,  307  },
361   },
362   /* Chirp table */
363   {   0,  42, -44, 50, -78, 18, 37, 20,
364       2, -31, -59,  2,  95, 90,  5, 15,
365      38,  -4, -91,-91, -42,-35,-36, -4,
366       37,  43,  34, 33,  15, -1, -8,-18,
367     -19,- 17,  -9,-10,  -6,  0,  3,  2,
368       1,   0,   0,  0,   0,  0,  0,  0,
369       0,   0,   0 },
370   /* interpolation coefficients */
371   { 3, 3, 3, 2, 2, 2, 1, 0 }
372};
373
374/* The following TMS5220C coefficients come from the tables in QBOXPRO, a program written at least in part by George "Larry" Brantingham of Quadravox, formerly of Texas Instruments, who had laid out the silicon for the TMS5100/TMC0280/CD2801. It is the same as the TMS5220 but has a change in the energy table (is this actually correct? or is this one correct for both 5220s? or is this the wrong table and the TMS5220 one correct for both?)
375Note: the energy table in QBOXPRO is also in RMS and was not used; however the energy values are offset by -1 compared to the 5220, which has been done here. the '152' is an educated guess.
376Note: the pitch table is the same as TMS5220 but with +1 applied to each value, and the first and second values the same, as shown in QV5220.COD.
377Note: the Kx tables are taken directly from QV5220.COD but with /64 added to each value as the values are stored ranging from -32768 to 32767 in QBOXPRO instead of -512 to 511 as on the real chip.
378***These values have not yet been verified against a real TMS5220C, see below as for why***
379This has not yet been verified against a real TMS5220C, and doing so will require decapping one as the TMS5220C, unlike the TMS5220, has a nonfunctional PROMOUT pin. This makes reading the internal LPC tables out electronically (via PROMOUT) impossible.
380*/
381static const struct tms5100_coeffs tms5220c_coeff =
382{
383   /* subtype */
384   SUBTYPE_TMS5220C,
385   10,
386   4,
387   6,
388   { 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
389   /* E   */
390   { 1,   2,   3,   4,   6,   8,   11,    16,
391    23,  33,  47,  63,  85,  114, 152, 511 }, /* last value is actually 0 in ROM, but 511 is stop sentinel */
392   /* P   */
393   {16,  16,  17,  18,  19,  20,  21,  22,
394    23,  24,  25,  26,  27,  28,  29,  30,
395    31,  32,  33,  34,  35,  36,  37,  38,
396    39,  40,  41,  42,  43,  45,  47,  49,
397    51,  53,  54,  57,  59,  61,  63,  66,
398    69,  71,  73,  77,  79,  81,  85,  87,
399    92,  95,  99, 102, 106, 110, 115, 119,
400   123, 128, 133, 138, 143, 149, 154, 160 },
401   {
402      /* K1  */
403      { -32062/64,-31872/64,-31806/64,-31679/64,-31551/64,-31423/64,-31230/64,-30846/64,
404        -30591/64,-30335/64,-30014/64,-29693/64,-29375/64,-28926/64,-28477/64,-27966/64,
405        -26351/64,-24266/64,-21632/64,-18387/64,-14514/64,-10061/64, -5155/64,    -1/64,
406          5152/64, 10058/64, 14511/64, 18385/64, 21630/64, 24265/64, 26349/64, 27966/64 },
407      /* K2  */
408      { -20970/64,-19332/64,-17530/64,-15566/64,-13447/64,-11183/64, -8791/64, -6294/64,
409         -3719/64, -1096/64,  1540/64,  4158/64,  6722/64,  9203/64, 11574/64, 13815/64,
410         15909/64, 17846/64, 19620/64, 21231/64, 22683/64, 23982/64, 25136/64, 26157/64,
411         27054/64, 27840/64, 28525/64, 29121/64, 29638/64, 30084/64, 30469/64, 32383/64 },
412      /* K3  */
413      { -28179/64,-24728/64,-21276/64,-17825/64,-14373/64,-10922/64, -7470/64, -4019/64,
414          -567/64,  2883/64,  6334/64,  9786/64, 13237/64, 16689/64, 20140/64, 23592/64 },
415      /* K4  */
416      { -20970/64,-17414/64,-13856/64,-10299/64, -6743/64, -3185/64,   370/64,  3927/64,
417          7484/64, 11041/64, 14598/64, 18155/64, 21712/64, 25269/64, 28826/64, 32383/64 },
418      /* K5  */
419      { -20970/64,-17999/64,-15029/64,-12058/64, -9087/64, -6116/64, -3145/64,  -174/64,
420          2796/64,  5766/64,  8737/64, 11708/64, 14679/64, 17650/64, 20621/64, 23592/64 },
421      /* K6  */
422      { -16383/64,-13543/64,-10703/64, -7864/64, -5024/64, -2184/64,   655/64,  3495/64,
423          6334/64,  9174/64, 12014/64, 14854/64, 17694/64, 20534/64, 23373/64, 26213/64 },
424      /* K7  */
425      { -19660/64,-16602/64,-13543/64,-10485/64, -7427/64, -4368/64, -1310/64,  1747/64,
426          4805/64,  7864/64, 10922/64, 13980/64, 17038/64, 20096/64, 23155/64, 26213/64 },
427      /* K8  */
428      { -16383/64,-10298/64, -4212/64,  1872/64,  7957/64, 14042/64, 20128/64, 26213/64 },
429      /* K9  */
430      { -16383/64,-11234/64, -6085/64,  -936/64,  4212/64,  9361/64, 14511/64, 19660/64 },
431      /* K10 */
432      { -13106/64, -8425/64, -3744/64,   936/64,  5617/64, 10298/64, 14979/64, 19660/64 },
433   },
434   /* Chirp table */
435   {   0,  42, -44, 50, -78, 18, 37, 20,
436       2, -31, -59,  2,  95, 90,  5, 15,
437      38, -4,  -91,-91, -42,-35,-36, -4,
438       37, 43,   34, 33,  15, -1, -8,-18,
439     -19,-17,   -9,-10,  -6,  0,  3,  2,
440       1,  0,    0,  0,   0,  0,  0,  0,
441       0,  0,    0 },
442   /* interpolation coefficients */
443   { 3, 3, 3, 2, 2, 2, 1, 0 }
444};
No newline at end of file
src/emu/sound/ay8910.c
r7640r7641
10601060{
10611061#if ENABLE_REGISTER_TEST
10621062   return;
1063#else
1064   ay8910_data_address_w(device, 1, data);
10631065#endif
1064   ay8910_data_address_w(device, 1, data);
10651066}
10661067
10671068WRITE8_DEVICE_HANDLER( ay8910_data_w )
10681069{
10691070#if ENABLE_REGISTER_TEST
10701071   return;
1072#else
1073   ay8910_data_address_w(device, 0, data);
10711074#endif
1072   ay8910_data_address_w(device, 0, data);
10731075}
src/emu/sound/tms5220.c
r7640r7641
700700       }
701701        }
702702
703        if (tms->old_energy == 0)
703        if (tms->old_pitch == 0)
704704        {
705            /* generate silent samples here */
706         tms->excitation_data = 0x00; /* This is NOT correct, the current_energy is forced to zero when we                         just passed a zero energy frame because thats what the tables hold for that value.
707                        However, this code does no harm. Will be removed later. */
708        }
709        else if (tms->old_pitch == 0)
710        {
711705            /* generate unvoiced samples here */
712706         if (tms->RNG & 1)
713707            tms->excitation_data = -0x40; /* according to the patent it is (either + or -) half of the maximum value in the chirp table, so +-64 */
src/emu/clifront.c
r7640r7641
669669         {
670670            switch (devconfig->devclass)
671671            {
672               case DEVICE_CLASS_AUDIO:      printf("  Audio: ");   break;
673               case DEVICE_CLASS_VIDEO:      printf("  Video: ");   break;
674               case DEVICE_CLASS_CPU_CHIP:      printf("    CPU: ");   break;
675               case DEVICE_CLASS_SOUND_CHIP:   printf("  Sound: ");   break;
676               case DEVICE_CLASS_TIMER:      printf("  Timer: ");   break;
677               default:                  printf("  Other: ");   break;
672               case DEVICE_CLASS_AUDIO:            printf("  Audio: ");   break;
673               case DEVICE_CLASS_VIDEO:            printf("  Video: ");   break;
674               case DEVICE_CLASS_CPU_CHIP:         printf("  CPU:   ");   break;
675               case DEVICE_CLASS_SOUND_CHIP:       printf("  Sound: ");   break;
676               case DEVICE_CLASS_TIMER:            printf("  Timer: ");   break;
677               default:                            printf("  Other: ");   break;
678678            }
679679            printf("%s ('%s')", devconfig->name(), devconfig->tag());
680680            if (devconfig->clock >= 1000000000)
src/lib/softfloat/mamesf.h
r7640r7641
5656| name for the 64-bit integer type.  Some compilers may allow `LIT64' to be
5757| defined as the identity macro:  `#define LIT64( a ) a'.
5858*----------------------------------------------------------------------------*/
59#define LIT64( a ) a##LL
59#define LIT64( a ) a##ULL
6060
6161/*----------------------------------------------------------------------------
6262| The macro `INLINE' can be used before functions that should be inlined.  If
docs/messnew.txt
r7640r7641
5050
5151Source Changes:
5252----------------
53- The core is based on MAME 0.137u1.  This incorporates all features of the
54  update to this core.  [MAME team]
5355
5456- [AMSTRAD CPC Family] Updated Hashes to GoodCPC V3.1415 [Cowering]
5557
r7640r7641
135137
136138System Driver Changes:
137139----------------------
138
139140- [ABC80] Partially fixed keyboard input. [Curt Coder]
140141
141142- [APEXC] Fixed disassembly in the debugger. [Robbbert]
makefile
r7640r7641
8383ifeq ($(firstword $(filter FreeBSD,$(UNAME))),FreeBSD)
8484TARGETOS = freebsd
8585endif
86ifeq ($(firstword $(filter GNU/kFreeBSD,$(UNAME))),GNU/kFreeBSD)
87TARGETOS = freebsd
88endif
8689ifeq ($(firstword $(filter OpenBSD,$(UNAME))),OpenBSD)
8790TARGETOS = openbsd
8891endif

Previous 15994 Revisions Next


© 1998-2018 The MESS Team