Previous 199869 Revisions Next

r31803 Wednesday 27th August, 2014 at 10:44:55 UTC by Alex Jackson
ymf278b: Use the memory system to access wavetable data. This should make it
 possible to hook up RAM as well as ROM to the device, e.g. for computer
 sound cards in MESS.

psikyo4: Improve and clean up wavetable ROM banking. The mask ROM tests in
 hotgm4ev and hotgmcki pass now. loderndf still fails for unknown reasons.
 Miscellaneous cleanups as well. [Alex Jackson]

(nw) I'm using the multipcm workaround for default address maps for now.
The core change I discussed will go in a separate commit, in case it causes
more problems than anticipated.
[src/emu/sound]ymf278b.c ymf278b.h
[src/mame/drivers]lordgun.c metro.c psikyo.c psikyo4.c psikyosh.c
[src/mame/includes]psikyo4.h psikyosh.h
[src/mame/video]psikyo4.c

trunk/src/mame/drivers/lordgun.c
r31802r31803
334334   AM_RANGE(0x50b900, 0x50b9ff) AM_READWRITE(aliencha_protection_r, aliencha_protection_w)
335335ADDRESS_MAP_END
336336
337static ADDRESS_MAP_START( ymf278_map, AS_0, 8, lordgun_state)
338   AM_RANGE(0x000000, 0x1fffff) AM_ROM
339ADDRESS_MAP_END
337340
338341/***************************************************************************
339342
r31802r31803
714717   MCFG_SPEAKER_STANDARD_MONO("mono")
715718
716719   MCFG_SOUND_ADD("ymf", YMF278B, 26000000)            // ? 26MHz matches video (decrease for faster music tempo)
720   MCFG_DEVICE_ADDRESS_MAP(AS_0, ymf278_map)
717721   MCFG_YMF278B_IRQ_HANDLER(WRITELINE(lordgun_state, soundirq))
718722   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
719723
trunk/src/mame/drivers/psikyo.c
r31802r31803
15901590   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 + 1 */
15911591   ROM_LOAD( "u34.bin",  0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
15921592
1593   ROM_REGION( 0x200000, "ymf", 0 )    /* Samples */
1593   ROM_REGION( 0x400000, "ymf", 0 )    /* Samples */
15941594   ROM_LOAD( "u61.bin",  0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) )    // 8 bit signed pcm (16KHz)
15951595
15961596   ROM_REGION( 0x040000, "spritelut", 0 )  /* */
r31802r31803
16201620   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 + 1 */
16211621   ROM_LOAD( "u34.bin",  0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
16221622
1623   ROM_REGION( 0x200000, "ymf", 0 )    /* Samples */
1623   ROM_REGION( 0x400000, "ymf", 0 )    /* Samples */
16241624   ROM_LOAD( "u61.bin",  0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) )    // 8 bit signed pcm (16KHz)
16251625
16261626   ROM_REGION( 0x040000, "spritelut", 0 )  /* */
r31802r31803
16501650   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 + 1 */
16511651   ROM_LOAD( "u34.bin",  0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
16521652
1653   ROM_REGION( 0x200000, "ymf", 0 )    /* Samples */
1653   ROM_REGION( 0x400000, "ymf", 0 )    /* Samples */
16541654   ROM_LOAD( "u61.bin",  0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) )    // 8 bit signed pcm (16KHz)
16551655
16561656   ROM_REGION( 0x040000, "spritelut", 0 )  /* */
r31802r31803
16801680   ROM_REGION( 0x200000, "gfx2", 0 )   /* Layer 0 + 1 */
16811681   ROM_LOAD( "u34.bin",  0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
16821682
1683   ROM_REGION( 0x200000, "ymf", 0 )    /* Samples */
1683   ROM_REGION( 0x400000, "ymf", 0 )    /* Samples */
16841684   ROM_LOAD( "u61.bin",  0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) )    // 8 bit signed pcm (16KHz)
16851685
16861686   ROM_REGION( 0x040000, "spritelut", 0 )  /* */
trunk/src/mame/drivers/psikyo4.c
r31802r31803
3131To Do:
3232
3333  Sprite List format not 100% understood.
34  The sound rom banking is wrong, at least for the ROM tests (see hotgm4ev), all the roms
35  are good, but it tests sound rom 0 twice due to the banking issues.
34  Lode Runner still fails the sound ROM test for some reason (different banking from the other games?)
3635
3736*-----------------------------------*
3837|         Tips and Tricks           |
r31802r31803
4039
4140Hold Button during booting to test roms (Checksum 16-bit) for:
4241
43Lode Runner - The Dig Fight:   PL1 Start (passes gfx, sample result:05A5, expects:0BB0 [both sets]) (banking?)
44Quiz de Idol! Hot Debut:       PL1 Start (passes)
42Hot Gimmick 4 Ever:            PL1 Start+PL2 Start (passes)
43Hot Gimmick Integral:          PL1 Start+PL2 Start (passes)
44Lode Runner - The Dig Fight:   PL1 Start (debug DSW must be set; passes gfx, sample result:05A5, expects:0BB0 [both sets])
45Quiz de Idol! Hot Debut:       PL1 Start (debug DSW must be set; passes)
4546
4647--- Lode Runner: The Dig Fight ---
4748
r31802r31803
120121
121122       The remaining ROMs are surface mounted TSOP48 Type II MASKROMs,
122123       either OKI MSM27C3252 (32MBit) or OKI MSM27C1652 (16MBit).
123       These MASKROMs are non-standard are require a custom adapter
124       These MASKROMs are non-standard and require a custom adapter
124125       to read them. Not all positions are populated for each game. See
125126       the source below for specifics.
126127
r31802r31803
129130#include "includes/psikyo4.h"
130131#include "rendlay.h"
131132
133static GFXLAYOUT_RAW( layout_16x16x8, 16, 16, 16*8, 16*16*8 )
132134
133static const gfx_layout layout_16x16x8 =
134{
135   16,16,
136   RGN_FRAC(1,1),
137   8,
138   {STEP8(0,1)},
139   {STEP16(0,8)},
140   {STEP16(0,16*8)},
141   16*16*8
142};
143
144135static GFXDECODE_START( ps4 )
145   GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x000, 0x80 ) // 8bpp tiles
136   GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x000, 0x40 ) // 8bpp tiles
146137GFXDECODE_END
147138
148139WRITE32_MEMBER(psikyo4_state::ps4_eeprom_w)
r31802r31803
176167   device.execute().set_input_line(4, HOLD_LINE);
177168}
178169
179CUSTOM_INPUT_MEMBER(psikyo4_state::system_port_r)
180{
181   return ioport("SYSTEM")->read();
182}
183
184170CUSTOM_INPUT_MEMBER(psikyo4_state::mahjong_ctrl_r)/* used by hotgmck/hgkairak */
185171{
186172   int player = (FPTR)param;
187   int sel = (m_io_select[0] & 0x0000ff00) >> 8;
188173   int ret = 0xff;
189174
190   if (sel & 1) ret &= ioport(player ? "KEY4" : "KEY0" )->read();
191   if (sel & 2) ret &= ioport(player ? "KEY5" : "KEY1" )->read();
192   if (sel & 4) ret &= ioport(player ? "KEY6" : "KEY2" )->read();
193   if (sel & 8) ret &= ioport(player ? "KEY7" : "KEY3" )->read();
175   if (m_io_select & 1) ret &= m_keys[player+0]->read();
176   if (m_io_select & 2) ret &= m_keys[player+1]->read();
177   if (m_io_select & 4) ret &= m_keys[player+2]->read();
178   if (m_io_select & 8) ret &= m_keys[player+3]->read();
194179
195180   return ret;
196181}
r31802r31803
298283   if (offset == 2) /* Configure bank for gfx test */
299284   {
300285      if (ACCESSING_BITS_0_15)    // Bank
301         membank("bank2")->set_base(memregion("gfx1")->base() + 0x2000 * (m_vidregs[offset] & 0x1fff)); /* Bank comes from vidregs */
286         membank("gfxbank")->set_base(memregion("gfx1")->base() + 0x2000 * (m_vidregs[offset] & 0x1fff)); /* Bank comes from vidregs */
302287   }
303288}
304289
305#define PCM_BANK_NO_LEGACY(n)   ((m_io_select[0] >> (n * 4 + 24)) & 0x07)
306
307void psikyo4_state::set_hotgmck_pcm_bank( int n )
290WRITE32_MEMBER(psikyo4_state::io_select_w)
308291{
309   UINT8 *ymf_pcmbank = memregion("ymf")->base() + 0x200000;
310   UINT8 *pcm_rom = memregion("ymfsource")->base();
292   // YMF banking
293   if (ACCESSING_BITS_16_31)
294   {
295      UINT32 bankdata = data >> 16;
296      UINT32 bankmask = mem_mask >> 16;
297      for (int i = 0; i < 4; i++)
298      {
299         if (bankmask & 0x0f)
300         {
301            int banknum = bankdata & 0x0f;
302            if (banknum < m_ymf_max_bank)
303               m_ymf_bank[i]->set_entry(banknum);
304         }
305         bankdata >>= 4;
306         bankmask >>= 4;
307      }
308   }
311309
312   memcpy(ymf_pcmbank + n * 0x100000, pcm_rom + PCM_BANK_NO_LEGACY(n) * 0x100000, 0x100000);
313}
314#define PCM_BANK_NO(n)  ((m_io_select[0] >> (n * 4 + 24)) & 0x07)
315WRITE32_MEMBER(psikyo4_state::hotgmck_pcm_bank_w)
316{
317   int old_bank0 = PCM_BANK_NO(0);
318   int old_bank1 = PCM_BANK_NO(1);
319   int new_bank0, new_bank1;
310   // mahjong input multiplexing
311   if (ACCESSING_BITS_8_15)
312      m_io_select = data >> 8;
320313
321   COMBINE_DATA(&m_io_select[0]);
322
323   new_bank0 = PCM_BANK_NO(0);
324   new_bank1 = PCM_BANK_NO(1);
325
326   if (old_bank0 != new_bank0)
327      set_hotgmck_pcm_bank(0);
328
329   if (old_bank1 != new_bank1)
330      set_hotgmck_pcm_bank(1);
314   if (ACCESSING_BITS_0_7)
315      logerror("Unk ioselect write %x mask %x\n", data, mem_mask);
331316}
332317
333318static ADDRESS_MAP_START( ps4_map, AS_PROGRAM, 32, psikyo4_state )
334319   AM_RANGE(0x00000000, 0x000fffff) AM_ROM     // program ROM (1 meg)
335   AM_RANGE(0x02000000, 0x021fffff) AM_ROMBANK("bank1") // data ROM
320   AM_RANGE(0x02000000, 0x021fffff) AM_ROM AM_REGION("maincpu", 0x100000) // data ROM
336321   AM_RANGE(0x03000000, 0x030037ff) AM_RAM AM_SHARE("spriteram")
337322   AM_RANGE(0x03003fe0, 0x03003fe3) AM_READWRITE(ps4_eeprom_r,ps4_eeprom_w)
338323   AM_RANGE(0x03003fe4, 0x03003fe7) AM_READNOP // also writes to this address - might be vblank?
r31802r31803
343328   AM_RANGE(0x03003ff8, 0x03003ffb) AM_WRITE(ps4_screen2_brt_w) // screen 2 brightness
344329   AM_RANGE(0x03003ffc, 0x03003fff) AM_WRITE(ps4_bgpen_2_dword_w) AM_SHARE("bgpen_2") // screen 2 clear colour
345330   AM_RANGE(0x03004000, 0x03005fff) AM_RAM_WRITE(ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w) AM_SHARE("paletteram") // palette
346   AM_RANGE(0x03006000, 0x03007fff) AM_ROMBANK("bank2") // data for rom tests (gfx), data is controlled by vidreg
331   AM_RANGE(0x03006000, 0x03007fff) AM_ROMBANK("gfxbank") // data for rom tests (gfx), data is controlled by vidreg
347332   AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff)
348333   AM_RANGE(0x05800000, 0x05800003) AM_READ_PORT("P1_P2")
349334   AM_RANGE(0x05800004, 0x05800007) AM_READ_PORT("P3_P4")
350   AM_RANGE(0x05800008, 0x0580000b) AM_WRITEONLY AM_SHARE("io_select") // Used by Mahjong games to choose input (also maps normal loderndf inputs to offsets)
335   AM_RANGE(0x05800008, 0x0580000b) AM_WRITE(io_select_w) // Used by Mahjong games to choose input (also maps normal loderndf inputs to offsets)
351336
352337   AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_SHARE("ram") // main RAM (1 meg)
338ADDRESS_MAP_END
353339
340static ADDRESS_MAP_START( ps4_ymf_map, AS_0, 8, psikyo4_state )
341   AM_RANGE(0x000000, 0x0fffff) AM_ROMBANK("ymfbank0")
342   AM_RANGE(0x100000, 0x1fffff) AM_ROMBANK("ymfbank1")
343   AM_RANGE(0x200000, 0x2fffff) AM_ROMBANK("ymfbank2")
344   AM_RANGE(0x300000, 0x3fffff) AM_ROMBANK("ymfbank3")
354345ADDRESS_MAP_END
355346
356347
357348static INPUT_PORTS_START( hotgmck )
358349   PORT_START("P1_P2")
359   PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,system_port_r, NULL)
350   PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "SYSTEM")
360351   PORT_BIT( 0x00ffff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
361352   PORT_BIT( 0xff000000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,mahjong_ctrl_r, (void *)0)
362353
363354   PORT_START("P3_P4")
364   PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,system_port_r, NULL)
355   PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "SYSTEM")
365356   PORT_BIT( 0x00ffff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
366   PORT_BIT( 0xff000000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,mahjong_ctrl_r, (void *)1)
357   PORT_BIT( 0xff000000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,mahjong_ctrl_r, (void *)4)
367358
368359   PORT_START("JP4")/* jumper pads 'JP4' on the PCB */
369360   /* EEPROM is read here */
r31802r31803
381372   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
382373   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE2 )   // Screen 2
383374
384   PORT_START("KEY0")  /* fake player 1 controls 1st bank */
375   PORT_START("KEY.0")  /* fake player 1 controls 1st bank */
385376   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
386377   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )
387378   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )
r31802r31803
391382   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
392383   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
393384
394   PORT_START("KEY1")  /* fake player 1 controls 2nd bank */
385   PORT_START("KEY.1")  /* fake player 1 controls 2nd bank */
395386   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )
396387   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
397388   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )
r31802r31803
401392   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
402393   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
403394
404   PORT_START("KEY2")  /* fake player 1 controls 3rd bank */
395   PORT_START("KEY.2")  /* fake player 1 controls 3rd bank */
405396   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )
406397   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )
407398   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )
r31802r31803
411402   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
412403   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
413404
414   PORT_START("KEY3")  /* fake player 1 controls 4th bank */
405   PORT_START("KEY.3")  /* fake player 1 controls 4th bank */
415406   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )
416407   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )
417408   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )
r31802r31803
421412   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
422413   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
423414
424   PORT_START("KEY4")  /* fake player 2 controls 1st bank */
415   PORT_START("KEY.4")  /* fake player 2 controls 1st bank */
425416   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
426417   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
427418   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
r31802r31803
431422   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
432423   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
433424
434   PORT_START("KEY5")  /* fake player 2 controls 2nd bank */
425   PORT_START("KEY.5")  /* fake player 2 controls 2nd bank */
435426   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
436427   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
437428   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
r31802r31803
441432   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
442433   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
443434
444   PORT_START("KEY6")  /* fake player 2 controls 3rd bank */
435   PORT_START("KEY.6")  /* fake player 2 controls 3rd bank */
445436   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
446437   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
447438   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
r31802r31803
451442   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
452443   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
453444
454   PORT_START("KEY7")  /* fake player 2 controls 4th bank */
445   PORT_START("KEY.7")  /* fake player 2 controls 4th bank */
455446   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
456447   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
457448   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
r31802r31803
470461   PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_COIN4 )    // Screen 2 - 2nd slot
471462   PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Screen 1
472463   PORT_SERVICE_NO_TOGGLE( 0x00000020, IP_ACTIVE_LOW)
473   PORT_DIPNAME( 0x00000040, 0x00000040, "Debug" ) /* Must be high for rom test, unknown other side-effects */
464   PORT_DIPNAME( 0x00000040, 0x00000040, "Debug" ) /* Must be on for rom test, unknown other side-effects */
474465   PORT_DIPSETTING(          0x00000040, DEF_STR( Off ) )
475466   PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
476467   PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Screen 2
r31802r31803
633624
634625void psikyo4_state::machine_start()
635626{
627   // configure YMF ROM banks
628   memory_region *YMFROM = memregion("ymf");
629   m_ymf_max_bank = YMFROM->bytes() / 0x100000;
630   for (int i = 0; i < 4; i++)
631   {
632      char banktag[16];
633      sprintf(banktag, "ymfbank%d", i);
634      m_ymf_bank[i] = membank(banktag);
635      m_ymf_bank[i]->configure_entries(0, m_ymf_max_bank, YMFROM->base(), 0x100000);
636      m_ymf_bank[i]->set_entry(i);
637   }
638
639   // configure SH2 DRC
640   m_maincpu->sh2drc_add_fastram(0x00000000, 0x000fffff, 1, memregion("maincpu")->base());
641   m_maincpu->sh2drc_add_fastram(0x03000000, 0x030037ff, 0, memshare("spriteram")->ptr());
642   m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, memshare("ram")->ptr());
643
644   save_item(NAME(m_io_select));
636645   save_item(NAME(m_oldbrt1));
637646   save_item(NAME(m_oldbrt2));
638647}
r31802r31803
683692   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
684693
685694   MCFG_SOUND_ADD("ymf", YMF278B, MASTER_CLOCK/2)
695   MCFG_DEVICE_ADDRESS_MAP(AS_0, ps4_ymf_map)
686696   MCFG_YMF278B_IRQ_HANDLER(WRITELINE(psikyo4_state, irqhandler))
687697   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
688698   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
r31802r31803
718728   ROM_LOAD32_WORD( "3l.bin", 0x1800000, 0x400000, CRC(a8a646f7) SHA1(be96626f3a4c8eb81f0bb7d8ac1c4e6619be50c8) )
719729   ROM_LOAD32_WORD( "3h.bin", 0x1800002, 0x400000, CRC(8c32becd) SHA1(9a8ddda4c6c007bb5cd4abb11859a4b7f1b1d578) )
720730
721   ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 )
722
723   ROM_REGION( 0x800000, "ymfsource", 0 )
731   ROM_REGION( 0x800000, "ymf", 0 )
724732   ROM_LOAD( "snd0.bin", 0x000000, 0x400000, CRC(c090d51a) SHA1(d229753b536209fe0da1985ca694fd1a73bc0f39) )
725733   ROM_LOAD( "snd1.bin", 0x400000, 0x400000, CRC(c24243b5) SHA1(2100d5d7d2e4b9ed90bde38cb61a5da09f00ce21) )
726734ROM_END
r31802r31803
745753   ROM_LOAD32_WORD( "5l.u7",  0x2800000, 0x400000, CRC(4639ef36) SHA1(324ffcfa1b1b9def00c15f628c59cea1d09b031d) )
746754   ROM_LOAD32_WORD( "5h.u16", 0x2800002, 0x400000, CRC(549e9e9e) SHA1(90c1695c89c059852f8b4f714b3dfee006839b44) )
747755
748   ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 )
749
750   ROM_REGION( 0x800000, "ymfsource", 0 )
756   ROM_REGION( 0x800000, "ymf", 0 )
751757   ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(0e8e5fdf) SHA1(041e3118f7a838dcc9fb99a1028fb48a452ba1d9) )
752758   ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(d8057d2f) SHA1(51d96cc4e9da81cbd1e815c652707407e6c7c3ae) )
753759ROM_END
r31802r31803
777783   ROM_LOAD32_WORD( "7l.u9",  0x3800000, 0x400000, CRC(2ec78fb2) SHA1(194e9833ab7057c2f83c581e722b41631d99fccc) )
778784   ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(c1735612) SHA1(84e32d3249d57cdc8ea91780801eaa196c439895) )
779785
780   ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 )
781
782   ROM_REGION( 0x800000, "ymfsource", 0 )
786   ROM_REGION( 0x800000, "ymf", 0 )
783787   ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(d62a0dba) SHA1(d81e2e1251b62eca8cd4d8eec2515b2cf7d7ff0a) )
784788   ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(1df91fb4) SHA1(f0f2d2d717fbd16a67da9f0e21f288ceedef839f) )
785789ROM_END
r31802r31803
789793   ROM_REGION( 0x500000, "maincpu", 0)
790794   ROM_LOAD32_WORD_SWAP( "2.u22",   0x000000, 0x080000, CRC(3334c21e) SHA1(8d825448e40bc50d670ab8587a40df6b27ac918e) )
791795   ROM_LOAD32_WORD_SWAP( "1.u23",   0x000002, 0x080000, CRC(b1a1c643) SHA1(1912a2d231e97ffbe9b668ca7f25cf406664f3ba) )
792   ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x400000, CRC(ad556d8e) SHA1(d3dc3c5cbe939b6fc28f861e4132c5485ba89f50) ) // no test
796   ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x400000, CRC(ad556d8e) SHA1(d3dc3c5cbe939b6fc28f861e4132c5485ba89f50) ) // no test; second half empty
793797
794798   ROM_REGION( 0x8000000, "gfx1", 0 )  /* Sprites */
795799   ROM_LOAD32_WORD( "0l.u2",  0x0000000, 0x400000, CRC(f65986f7) SHA1(3824a7ea7f14ef3f319b07bd1224847131f6cac0) ) // ok
r31802r31803
809813   ROM_LOAD32_WORD( "7l.u9",  0x3800000, 0x400000, CRC(022a8a31) SHA1(a21dbf36f56e144f9817c7255866546367dda2f6) ) // ok
810814   ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(77e47409) SHA1(0e1deb01dd1250c90fc3eed776becd51899f0b5f) ) // ok
811815
812   ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 )
813
814   ROM_REGION( 0x800000, "ymfsource", 0 )
816   ROM_REGION( 0x800000, "ymf", 0 )
815817   ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(051e2fed) SHA1(ee8073332801982549b3c142fba114e27733a756) ) // ok
816   ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(0de0232d) SHA1(c600fe1d3c6c05e451ae7ef249bb92e8fc9cec3a) ) // ok (but fails rom test due to banking error in emulation)
818   ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(0de0232d) SHA1(c600fe1d3c6c05e451ae7ef249bb92e8fc9cec3a) ) // ok
817819ROM_END
818820
819821ROM_START( hotgmcki )
820   ROM_REGION( 0x500000, "maincpu", 0)
822   ROM_REGION( 0x300000, "maincpu", 0)
821823   ROM_LOAD32_WORD_SWAP( "2.u22",   0x000000, 0x080000, CRC(abc192dd) SHA1(674c2b8814319605c1b6221bbe18588a98dda093) )
822824   ROM_LOAD32_WORD_SWAP( "1.u23",   0x000002, 0x080000, CRC(8be896d0) SHA1(5d677dede4ec18cbfc54acae95fe0f10bfc4d566) )
823825   ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x200000, CRC(9017ae8e) SHA1(0879198606095a2d209df059538ce1c73460b30e) ) // no test
824   ROM_RELOAD(0x300000,0x200000)
825826
826827   /* Roms have to be mirrored with ROM_RELOAD for rom tests to pass */
827828   ROM_REGION( 0x4000000, "gfx1", ROMREGION_ERASEFF | 0 )  /* Sprites */
r31802r31803
858859   ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x200000, CRC(a3fd4ae5) SHA1(31056e5f645984b85e9bc3767016a856ac0175f9) ) // ok
859860   ROM_RELOAD(                0x3c00002, 0x200000 )
860861
861   ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 )
862
863   ROM_REGION( 0x800000, "ymfsource", 0 )
862   ROM_REGION( 0x800000, "ymf", 0 )
864863   ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(5f275f35) SHA1(c5952a16e9f0cee6fc990c234ccaa7ca577741bd) ) // ok
865   ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(98608779) SHA1(a73c21f0f66c2af903e44a0a6a9f821b00615e7b) ) // ok (but fails rom test due to bad banking in service mode)
864   ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(98608779) SHA1(a73c21f0f66c2af903e44a0a6a9f821b00615e7b) ) // ok
866865ROM_END
867866
868867
869868ROM_START( loderndf )
870   ROM_REGION( 0x100000, "maincpu", 0)
869   ROM_REGION( 0x300000, "maincpu", 0)
871870   ROM_LOAD32_WORD_SWAP( "1b.u23", 0x000002, 0x080000, CRC(fae92286) SHA1(c3d3a50514fb9c0bbd3ffb5c4bfcc853dc1893d2) )
872871   ROM_LOAD32_WORD_SWAP( "2b.u22", 0x000000, 0x080000, CRC(fe2424c0) SHA1(48a329cfdf98da1a8701b430c159d470c0f5eca1) )
873872
r31802r31803
882881ROM_END
883882
884883ROM_START( loderndfa )
885   ROM_REGION( 0x100000, "maincpu", 0)
884   ROM_REGION( 0x300000, "maincpu", 0)
886885   ROM_LOAD32_WORD_SWAP( "12.u23", 0x000002, 0x080000, CRC(661d372e) SHA1(c509c3ad9ca01e0f58bfc319b2738ecc36865ffd) )
887886   ROM_LOAD32_WORD_SWAP( "3.u22", 0x000000, 0x080000, CRC(0a63529f) SHA1(05dd7877041b69d46e41c5bddb877c083620294b) )
888887
r31802r31803
897896ROM_END
898897
899898ROM_START( hotdebut )
900   ROM_REGION( 0x100000, "maincpu", 0)
899   ROM_REGION( 0x300000, "maincpu", 0)
901900   ROM_LOAD32_WORD_SWAP( "1.u23",   0x000002, 0x080000, CRC(0b0d0027) SHA1(f62c487a725439af035d2904d453d3c2f7a5649b) )
902901   ROM_LOAD32_WORD_SWAP( "2.u22",   0x000000, 0x080000, CRC(c3b5180b) SHA1(615cc1fd99a1e4634b04bb92a3c41f914644e903) )
903902
r31802r31803
914913ROM_END
915914
916915
917void psikyo4_state::hotgmck_pcm_bank_postload()
918{
919   set_hotgmck_pcm_bank(0);
920   set_hotgmck_pcm_bank(1);
921}
922
923void psikyo4_state::install_hotgmck_pcm_bank()
924{
925   UINT8 *ymf_pcm = memregion("ymf")->base();
926   UINT8 *pcm_rom = memregion("ymfsource")->base();
927
928   memcpy(ymf_pcm, pcm_rom, 0x200000);
929
930   m_io_select[0] = (m_io_select[0] & 0x00ffffff) | 0x32000000;
931   set_hotgmck_pcm_bank(0);
932   set_hotgmck_pcm_bank(1);
933
934   m_maincpu->space(AS_PROGRAM).install_write_handler(0x5800008, 0x580000b, write32_delegate(FUNC(psikyo4_state::hotgmck_pcm_bank_w),this));
935   machine().save().register_postload(save_prepost_delegate(FUNC(psikyo4_state::hotgmck_pcm_bank_postload), this));
936}
937
938DRIVER_INIT_MEMBER(psikyo4_state,hotgmck)
939{
940   UINT8 *RAM = memregion("maincpu")->base();
941   membank("bank1")->set_base(&RAM[0x100000]);
942   install_hotgmck_pcm_bank();    // Banked PCM ROM
943
944   UINT32 *rom = (UINT32 *)memregion("maincpu")->base();
945   m_maincpu->sh2drc_add_fastram(0x00000000, 0x000fffff, 1, rom);
946   m_maincpu->sh2drc_add_fastram(0x03000000, 0x030037ff, 0, &m_spriteram[0]);
947   m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[0]);
948}
949
950
951/*    YEAR  NAME      PARENT    MACHINE    INPUT     INIT                     MONITOR COMPANY   FULLNAME     FLAGS */
952GAME( 1997, hotgmck,  0,        ps4big,    hotgmck,  psikyo4_state, hotgmck,  ROT0,   "Psikyo", "Taisen Hot Gimmick (Japan)", GAME_SUPPORTS_SAVE )
953GAME( 1998, hgkairak, 0,        ps4big,    hotgmck,  psikyo4_state, hotgmck,  ROT0,   "Psikyo", "Taisen Hot Gimmick Kairakuten (Japan)", GAME_SUPPORTS_SAVE )
954GAME( 1999, hotgmck3, 0,        ps4big,    hotgmck,  psikyo4_state, hotgmck,  ROT0,   "Psikyo", "Taisen Hot Gimmick 3 Digital Surfing (Japan)", GAME_SUPPORTS_SAVE )
955GAME( 2000, hotgm4ev, 0,        ps4big,    hotgmck,  psikyo4_state, hotgmck,  ROT0,   "Psikyo", "Taisen Hot Gimmick 4 Ever (Japan)", GAME_SUPPORTS_SAVE )
956GAME( 2001, hotgmcki, 0,        ps4big,    hotgmck,  psikyo4_state, hotgmck,  ROT0,   "Psikyo", "Mahjong Hot Gimmick Integral (Japan)", GAME_SUPPORTS_SAVE )
957GAME( 2000, loderndf, 0,        ps4small,  loderndf, driver_device, 0,        ROT0,   "Psikyo", "Lode Runner - The Dig Fight (ver. B)", GAME_SUPPORTS_SAVE )
958GAME( 2000, loderndfa,loderndf, ps4small,  loderndf, driver_device, 0,        ROT0,   "Psikyo", "Lode Runner - The Dig Fight (ver. A)", GAME_SUPPORTS_SAVE )
959GAME( 2000, hotdebut, 0,        ps4small,  hotdebut, driver_device, 0,        ROT0,   "MOSS / Psikyo", "Quiz de Idol! Hot Debut (Japan)", GAME_SUPPORTS_SAVE )
916/*    YEAR  NAME      PARENT    MACHINE    INPUT     INIT              MONITOR COMPANY   FULLNAME     FLAGS */
917GAME( 1997, hotgmck,  0,        ps4big,    hotgmck,  driver_device, 0, ROT0,   "Psikyo", "Taisen Hot Gimmick (Japan)", GAME_SUPPORTS_SAVE )
918GAME( 1998, hgkairak, 0,        ps4big,    hotgmck,  driver_device, 0, ROT0,   "Psikyo", "Taisen Hot Gimmick Kairakuten (Japan)", GAME_SUPPORTS_SAVE )
919GAME( 1999, hotgmck3, 0,        ps4big,    hotgmck,  driver_device, 0, ROT0,   "Psikyo", "Taisen Hot Gimmick 3 Digital Surfing (Japan)", GAME_SUPPORTS_SAVE )
920GAME( 2000, hotgm4ev, 0,        ps4big,    hotgmck,  driver_device, 0, ROT0,   "Psikyo", "Taisen Hot Gimmick 4 Ever (Japan)", GAME_SUPPORTS_SAVE )
921GAME( 2001, hotgmcki, 0,        ps4big,    hotgmck,  driver_device, 0, ROT0,   "Psikyo", "Mahjong Hot Gimmick Integral (Japan)", GAME_SUPPORTS_SAVE )
922GAME( 2000, loderndf, 0,        ps4small,  loderndf, driver_device, 0, ROT0,   "Psikyo", "Lode Runner - The Dig Fight (ver. B)", GAME_SUPPORTS_SAVE )
923GAME( 2000, loderndfa,loderndf, ps4small,  loderndf, driver_device, 0, ROT0,   "Psikyo", "Lode Runner - The Dig Fight (ver. A)", GAME_SUPPORTS_SAVE )
924GAME( 2000, hotdebut, 0,        ps4small,  hotdebut, driver_device, 0, ROT0,   "MOSS / Psikyo", "Quiz de Idol! Hot Debut (Japan)", GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/psikyosh.c
r31802r31803
355355   if (offset == 4) /* Configure bank for gfx test */
356356   {
357357      if (ACCESSING_BITS_0_15)    // Bank
358         membank("bank2")->set_entry(m_vidregs[offset] & 0xfff);
358         membank("gfxbank")->set_entry(m_vidregs[offset] & 0xfff);
359359   }
360360}
361361
r31802r31803
486486static ADDRESS_MAP_START( ps3v1_map, AS_PROGRAM, 32, psikyosh_state )
487487// rom mapping
488488   AM_RANGE(0x00000000, 0x000fffff) AM_ROM // program ROM (1 meg)
489   AM_RANGE(0x02000000, 0x021fffff) AM_ROMBANK("bank1") // data ROM
489   AM_RANGE(0x02000000, 0x020fffff) AM_ROM AM_REGION("maincpu", 0x100000) // data ROM
490490// video chip
491491   AM_RANGE(0x03000000, 0x03003fff) AM_RAM AM_SHARE("spriteram") // video banks0-7 (sprites and sprite list)
492492   AM_RANGE(0x03004000, 0x0300ffff) AM_RAM AM_SHARE("bgram") // video banks 7-0x1f (backgrounds and other effects)
r31802r31803
494494   AM_RANGE(0x03050000, 0x030501ff) AM_RAM AM_SHARE("zoomram") // sprite zoom lookup table
495495   AM_RANGE(0x0305ffdc, 0x0305ffdf) AM_READNOP AM_WRITE(psikyosh_irqctrl_w) // also writes to this address - might be vblank reads?
496496   AM_RANGE(0x0305ffe0, 0x0305ffff) AM_RAM_WRITE(psikyosh_vidregs_w) AM_SHARE("vidregs") //  video registers
497   AM_RANGE(0x03060000, 0x0307ffff) AM_ROMBANK("bank2") // data for rom tests (gfx), data is controlled by vidreg
497   AM_RANGE(0x03060000, 0x0307ffff) AM_ROMBANK("gfxbank") // data for rom tests (gfx), data is controlled by vidreg
498498// rom mapping
499   AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("bank2") // data for rom tests (gfx) (Mirrored?)
499   AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("gfxbank") // data for rom tests (gfx) (Mirrored?)
500500// sound chip
501501   AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff)
502502// inputs/eeprom
r31802r31803
522522   AM_RANGE(0x04050000, 0x040501ff) AM_RAM AM_SHARE("zoomram") // sprite zoom lookup table
523523   AM_RANGE(0x0405ffdc, 0x0405ffdf) AM_READNOP AM_WRITE(psikyosh_irqctrl_w) // also writes to this address - might be vblank reads?
524524   AM_RANGE(0x0405ffe0, 0x0405ffff) AM_RAM_WRITE(psikyosh_vidregs_w) AM_SHARE("vidregs") // video registers
525   AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("bank2") // data for rom tests (gfx), data is controlled by vidreg
525   AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("gfxbank") // data for rom tests (gfx), data is controlled by vidreg
526526// rom mapping
527   AM_RANGE(0x05000000, 0x0507ffff) AM_ROMBANK("bank1") // data ROM
527   AM_RANGE(0x05000000, 0x0507ffff) AM_ROM AM_REGION("maincpu", 0x100000) // data ROM
528528// ram
529529   AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_SHARE("ram")
530530ADDRESS_MAP_END
r31802r31803
764764
765765void psikyosh_state::machine_start()
766766{
767   membank("bank2")->configure_entries(0, 0x1000, memregion("gfx1")->base(), 0x20000);
767   membank("gfxbank")->configure_entries(0, 0x1000, memregion("gfx1")->base(), 0x20000);
768768}
769769
770770
r31802r31803
828828/* PS3 */
829829
830830ROM_START( soldivid )
831   ROM_REGION( 0x100000, "maincpu", 0)
831   ROM_REGION( 0x200000, "maincpu", 0)
832832   ROM_LOAD32_WORD_SWAP( "2-prog_l.u18", 0x000002, 0x080000, CRC(cf179b04) SHA1(343f00a81cffd44334a4db81b6b828b7cf73c1e8) )
833833   ROM_LOAD32_WORD_SWAP( "1-prog_h.u17", 0x000000, 0x080000, CRC(f467d1c4) SHA1(a011e6f310a54f09efa0bf4597783cd78c05ad6f) )
834834
r31802r31803
846846ROM_END
847847
848848ROM_START( s1945ii )
849   ROM_REGION( 0x100000, "maincpu", 0) /* Code */
849   ROM_REGION( 0x200000, "maincpu", 0) /* Code */
850850   ROM_LOAD32_WORD_SWAP( "2_prog_l.u18", 0x000002, 0x080000, CRC(20a911b8) SHA1(82ba7b93bd621fc45a4dc2722752077b59a0a233) )
851851   ROM_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(4c0fe85e) SHA1(74f810a1c3e9d629c8b190f68d73ce07b11f77b7) )
852852
r31802r31803
898898ROM_END
899899
900900ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan region */
901   ROM_REGION( 0x100000, "maincpu", 0)
901   ROM_REGION( 0x200000, "maincpu", 0)
902902   ROM_LOAD32_WORD_SWAP( "1-b_pr_l.u18", 0x000002, 0x080000, CRC(52d12225) SHA1(0a31a5d557414e7bf51dc6f7fbdd417a20b78df1) )
903903   ROM_LOAD32_WORD_SWAP( "1-b_pr_h.u17", 0x000000, 0x080000, CRC(1bbd0345) SHA1(c6ccb7c97cc9e9ea298c1883d1dd5563907a7255) )
904904
r31802r31803
922922ROM_END
923923
924924ROM_START( sbombera ) /* Original version */
925   ROM_REGION( 0x100000, "maincpu", 0)
925   ROM_REGION( 0x200000, "maincpu", 0)
926926   ROM_LOAD32_WORD_SWAP( "2.u18", 0x000002, 0x080000, CRC(57819a26) SHA1(d7a6fc957e39adf97762ab0a35b91aa17ec026e0) )
927927   ROM_LOAD32_WORD_SWAP( "1.u17", 0x000000, 0x080000, CRC(c388e847) SHA1(cbf4f2e191894160bdf0290d72cf20c222aaf7a7) )
928928
r31802r31803
996996/* PS5v2 */
997997
998998ROM_START( dragnblz )
999   ROM_REGION( 0x100000, "maincpu", 0)
999   ROM_REGION( 0x180000, "maincpu", 0)
10001000   ROM_LOAD32_WORD_SWAP( "2prog_h.u21",   0x000000, 0x080000, CRC(fc5eade8) SHA1(e5d05543641e4a3900b0d42e0d5f75734683d635) )
10011001   ROM_LOAD32_WORD_SWAP( "1prog_l.u22",   0x000002, 0x080000, CRC(95d6fd02) SHA1(2b2830e7fa66cbd13666191762bfddc40571caec) )
10021002
r31802r31803
10221022   ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) )
10231023   ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) )
10241024
1025   ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */
1025   ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
10261026   ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7fd1b225) SHA1(6aa61021ada51393bbb34fd1aea00b8feccc8197) )
10271027
10281028   ROM_REGION( 0x100, "eeprom", 0 )
r31802r31803
10381038*/
10391039
10401040ROM_START( gnbarich )
1041   ROM_REGION( 0x100000, "maincpu", 0)
1041   ROM_REGION( 0x180000, "maincpu", 0)
10421042   ROM_LOAD32_WORD_SWAP( "2-prog_l.u21",   0x000000, 0x080000, CRC(c136cd9c) SHA1(ab66c4f5196a66a97dbb5832336a203421cf40fa) )
10431043   ROM_LOAD32_WORD_SWAP( "1-prog_h.u22",   0x000002, 0x080000, CRC(6588fc96) SHA1(3db29fcf17e8b2aee465319b557bd3e45bc966b2) )
10441044
r31802r31803
10641064//  ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) ) /* From Dragon Blaze */
10651065//  ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) /* From Dragon Blaze */
10661066
1067   ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */
1067   ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
10681068   ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7b10436b) SHA1(c731fcce024e286a677ca10a91761c1ee06094a5) )
10691069
10701070   ROM_REGION( 0x100, "eeprom", 0 )
r31802r31803
10721072ROM_END
10731073
10741074ROM_START( mjgtaste )
1075   ROM_REGION( 0x100000, "maincpu", 0)
1075   ROM_REGION( 0x180000, "maincpu", 0)
10761076   ROM_LOAD32_WORD_SWAP( "2.u21",   0x000000, 0x080000, CRC(5f2041dc) SHA1(f3862ffdb8df0cf921ce1cb0236935731e7729a7) )
10771077   ROM_LOAD32_WORD_SWAP( "1.u22",   0x000002, 0x080000, CRC(f5ff7876) SHA1(4c909db9c97f29fd79df6dacd29762688701b973) )
10781078
r31802r31803
10981098//  ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) ) /* From Dragon Blaze */
10991099//  ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) /* From Dragon Blaze */
11001100
1101   ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */
1101   ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
11021102   ROM_LOAD( "snd0.u52", 0x000000, 0x400000, CRC(0179f018) SHA1(16ae63e021230356777342ed902e02407a1a1b82) )
11031103
11041104   ROM_REGION( 0x100, "eeprom", 0 )
r31802r31803
11061106ROM_END
11071107
11081108ROM_START( tgm2 )
1109   ROM_REGION( 0x100000, "maincpu", 0)
1109   ROM_REGION( 0x180000, "maincpu", 0)
11101110   ROM_LOAD32_WORD_SWAP( "2.u21",   0x000000, 0x080000, CRC(b19f6c31) SHA1(c58346c575db71262aebc3993743cb031c41e4af) )
11111111   ROM_LOAD32_WORD_SWAP( "1.u22",   0x000002, 0x080000, CRC(c521bf24) SHA1(0ee5b9f74b6b8bcc01b2270c53f30d99e877ed64) )
11121112
r31802r31803
11291129   ROM_LOAD32_WORD( "95ts_10l.u58", 0x2800000, 0x200000, CRC(303a5240) SHA1(5816d1922e85bc27a2a13cdd183d9e67c7ddb2e1) )
11301130   ROM_LOAD32_WORD( "96ts_10h.u59", 0x2800002, 0x200000, CRC(2240ebf6) SHA1(b61f93a18dd9d94fb57d95745d4df2e41a0371ff) )
11311131
1132   ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */
1132   ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
11331133   ROM_LOAD( "97ts_snd.u52", 0x000000, 0x400000, CRC(9155eca6) SHA1(f0b4f68462d8a465c39815d3b7fd9818788132ae) )
11341134
11351135   ROM_REGION( 0x100, "eeprom", 0 ) /* Default Eeprom (contains scores etc.) */
r31802r31803
11381138ROM_END
11391139
11401140ROM_START( tgm2p )
1141   ROM_REGION( 0x100000, "maincpu", 0)
1141   ROM_REGION( 0x180000, "maincpu", 0)
11421142   ROM_LOAD32_WORD_SWAP( "2b.u21",   0x000000, 0x080000, CRC(38bc626c) SHA1(783e8413b11f1fa08d331b09ef4ed63f62b87ead) )
11431143   ROM_LOAD32_WORD_SWAP( "1b.u22",   0x000002, 0x080000, CRC(7599fb19) SHA1(3f7e81756470c173cc17a7e7dee91437571fd0c3) )
11441144
r31802r31803
11611161   ROM_LOAD32_WORD( "95ts_10l.u58", 0x2800000, 0x200000, CRC(303a5240) SHA1(5816d1922e85bc27a2a13cdd183d9e67c7ddb2e1) )
11621162   ROM_LOAD32_WORD( "96ts_10h.u59", 0x2800002, 0x200000, CRC(2240ebf6) SHA1(b61f93a18dd9d94fb57d95745d4df2e41a0371ff) )
11631163
1164   ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */
1164   ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
11651165   ROM_LOAD( "97ts_snd.u52", 0x000000, 0x400000, CRC(9155eca6) SHA1(f0b4f68462d8a465c39815d3b7fd9818788132ae) )
11661166
11671167   ROM_REGION( 0x100, "eeprom", 0 ) /* Default Eeprom (contains scores etc.) */
r31802r31803
11691169   ROM_LOAD( "tgm2p.default.nv", 0x000, 0x100, CRC(b2328b40) SHA1(e6cda4d6f4e91b9f78d2ca84a5eee6c3bd03fe02) )
11701170ROM_END
11711171
1172void psikyosh_state::ps3_init()
1172DRIVER_INIT_MEMBER(psikyosh_state,ps3)
11731173{
1174   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
11741175   m_maincpu->sh2drc_add_fastram(0x03004000, 0x0300ffff, 0, &m_bgram[0]);
11751176   m_maincpu->sh2drc_add_fastram(0x03050000, 0x030501ff, 0, &m_zoomram[0]);
11761177   m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[0]);
11771178}
11781179
1179void psikyosh_state::ps5_init()
1180DRIVER_INIT_MEMBER(psikyosh_state,ps5)
11801181{
1182   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
11811183   m_maincpu->sh2drc_add_fastram(0x04004000, 0x0400ffff, 0, &m_bgram[0]);
11821184   m_maincpu->sh2drc_add_fastram(0x04050000, 0x040501ff, 0, &m_zoomram[0]);
11831185   m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[0]);
11841186}
11851187
1186DRIVER_INIT_MEMBER(psikyosh_state,soldivid)
1187{
1188   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1189   ps3_init();
1190}
1191
1192DRIVER_INIT_MEMBER(psikyosh_state,s1945ii)
1193{
1194   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1195   ps3_init();
1196}
1197
1198DRIVER_INIT_MEMBER(psikyosh_state,daraku)
1199{
1200   UINT8 *RAM = memregion("maincpu")->base();
1201   membank("bank1")->set_base(&RAM[0x100000]);
1202   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1203   ps3_init();
1204}
1205
1206DRIVER_INIT_MEMBER(psikyosh_state,sbomberb)
1207{
1208   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1209   ps3_init();
1210}
1211
1212DRIVER_INIT_MEMBER(psikyosh_state,gunbird2)
1213{
1214   UINT8 *RAM = memregion("maincpu")->base();
1215   membank("bank1")->set_base(&RAM[0x100000]);
1216   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1217   ps5_init();
1218}
1219
1220DRIVER_INIT_MEMBER(psikyosh_state,s1945iii)
1221{
1222   UINT8 *RAM = memregion("maincpu")->base();
1223   membank("bank1")->set_base(&RAM[0x100000]);
1224   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1225   ps5_init();
1226}
1227
1228DRIVER_INIT_MEMBER(psikyosh_state,dragnblz)
1229{
1230   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1231   ps5_init();
1232}
1233
1234DRIVER_INIT_MEMBER(psikyosh_state,gnbarich)
1235{
1236   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1237   ps5_init();
1238}
1239
1240DRIVER_INIT_MEMBER(psikyosh_state,tgm2)
1241{
1242   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
1243   ps5_init();
1244}
1245
12461188DRIVER_INIT_MEMBER(psikyosh_state,mjgtaste)
12471189{
1248   m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
12491190   /* needs to install mahjong controls too (can select joystick in test mode tho) */
12501191   m_maincpu->space(AS_PROGRAM).install_read_handler(0x03000000, 0x03000003, read32_delegate(FUNC(psikyosh_state::mjgtaste_input_r),this));
1251   ps5_init();
1192   DRIVER_INIT_CALL(ps5);
12521193}
12531194
12541195
12551196/*     YEAR  NAME      PARENT    MACHINE    INPUT     INIT      MONITOR COMPANY   FULLNAME FLAGS */
12561197
12571198/* ps3-v1 */
1258GAME( 1997, soldivid, 0,        psikyo3v1,   soldivid, psikyosh_state, soldivid, ROT0,   "Psikyo", "Sol Divide - The Sword Of Darkness", GAME_SUPPORTS_SAVE )
1259GAME( 1997, s1945ii,  0,        psikyo3v1,   s1945ii, psikyosh_state,  s1945ii,  ROT270, "Psikyo", "Strikers 1945 II", GAME_SUPPORTS_SAVE )
1260GAME( 1998, daraku,   0,        psikyo3v1,   daraku, psikyosh_state,   daraku,   ROT0,   "Psikyo", "Daraku Tenshi - The Fallen Angels", GAME_SUPPORTS_SAVE )
1261GAME( 1998, sbomber,  0,        psikyo3v1,   sbomberb, psikyosh_state, sbomberb, ROT270, "Psikyo", "Space Bomber (ver. B)", GAME_SUPPORTS_SAVE )
1262GAME( 1998, sbombera, sbomber,  psikyo3v1,   sbomberb, psikyosh_state, sbomberb, ROT270, "Psikyo", "Space Bomber", GAME_SUPPORTS_SAVE )
1199GAME( 1997, soldivid, 0,        psikyo3v1,   soldivid, psikyosh_state, ps3, ROT0,   "Psikyo", "Sol Divide - The Sword Of Darkness", GAME_SUPPORTS_SAVE )
1200GAME( 1997, s1945ii,  0,        psikyo3v1,   s1945ii,  psikyosh_state, ps3, ROT270, "Psikyo", "Strikers 1945 II", GAME_SUPPORTS_SAVE )
1201GAME( 1998, daraku,   0,        psikyo3v1,   daraku,   psikyosh_state, ps3, ROT0,   "Psikyo", "Daraku Tenshi - The Fallen Angels", GAME_SUPPORTS_SAVE )
1202GAME( 1998, sbomber,  0,        psikyo3v1,   sbomberb, psikyosh_state, ps3, ROT270, "Psikyo", "Space Bomber (ver. B)", GAME_SUPPORTS_SAVE )
1203GAME( 1998, sbombera, sbomber,  psikyo3v1,   sbomberb, psikyosh_state, ps3, ROT270, "Psikyo", "Space Bomber", GAME_SUPPORTS_SAVE )
12631204
12641205/* ps5 */
1265GAME( 1998, gunbird2, 0,        psikyo5,     gunbird2, psikyosh_state, gunbird2, ROT270, "Psikyo", "Gunbird 2", GAME_SUPPORTS_SAVE )
1266GAME( 1999, s1945iii, 0,        psikyo5,     s1945iii, psikyosh_state, s1945iii, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", GAME_SUPPORTS_SAVE )
1206GAME( 1998, gunbird2, 0,        psikyo5,     gunbird2, psikyosh_state, ps5, ROT270, "Psikyo", "Gunbird 2", GAME_SUPPORTS_SAVE )
1207GAME( 1999, s1945iii, 0,        psikyo5,     s1945iii, psikyosh_state, ps5, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", GAME_SUPPORTS_SAVE )
12671208
12681209/* ps5v2 */
1269GAME( 2000, dragnblz, 0,        psikyo5,     dragnblz, psikyosh_state, dragnblz, ROT270, "Psikyo", "Dragon Blaze", GAME_SUPPORTS_SAVE )
1270GAME( 2000, tgm2,     0,        psikyo5_240, tgm2, psikyosh_state,     tgm2,     ROT0,   "Arika",  "Tetris the Absolute The Grand Master 2", GAME_SUPPORTS_SAVE )
1271GAME( 2000, tgm2p,    tgm2,     psikyo5_240, tgm2, psikyosh_state,     tgm2,     ROT0,   "Arika",  "Tetris the Absolute The Grand Master 2 Plus", GAME_SUPPORTS_SAVE )
1272GAME( 2001, gnbarich, 0,        psikyo5,     gnbarich, psikyosh_state, gnbarich, ROT270, "Psikyo", "Gunbarich", GAME_SUPPORTS_SAVE )
1210GAME( 2000, dragnblz, 0,        psikyo5,     dragnblz, psikyosh_state, ps5,      ROT270, "Psikyo", "Dragon Blaze", GAME_SUPPORTS_SAVE )
1211GAME( 2000, tgm2,     0,        psikyo5_240, tgm2,     psikyosh_state, ps5,      ROT0,   "Arika",  "Tetris the Absolute The Grand Master 2", GAME_SUPPORTS_SAVE )
1212GAME( 2000, tgm2p,    tgm2,     psikyo5_240, tgm2,     psikyosh_state, ps5,      ROT0,   "Arika",  "Tetris the Absolute The Grand Master 2 Plus", GAME_SUPPORTS_SAVE )
1213GAME( 2001, gnbarich, 0,        psikyo5,     gnbarich, psikyosh_state, ps5,      ROT270, "Psikyo", "Gunbarich", GAME_SUPPORTS_SAVE )
12731214GAME( 2002, mjgtaste, 0,        psikyo5,     mjgtaste, psikyosh_state, mjgtaste, ROT0,   "Psikyo", "Mahjong G-Taste", GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/metro.c
r31802r31803
729729   AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_WRITE(daitorid_sound_rombank_w)
730730ADDRESS_MAP_END
731731
732/*****************/
733
734
735static ADDRESS_MAP_START( ymf278_map, AS_IO, 8, metro_state )
736   AM_RANGE(0x000000, 0x27ffff) AM_ROM
737ADDRESS_MAP_END
738
739
732740/***************************************************************************
733741                                    Bal Cube
734742***************************************************************************/
r31802r31803
36513659   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
36523660
36533661   MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
3662   MCFG_DEVICE_ADDRESS_MAP(AS_0, ymf278_map)
36543663   MCFG_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt))
36553664   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
36563665   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
trunk/src/mame/includes/psikyo4.h
r31802r31803
2121      m_bgpen_1(*this, "bgpen_1"),
2222      m_bgpen_2(*this, "bgpen_2"),
2323      m_paletteram(*this, "paletteram"),
24      m_io_select(*this, "io_select"),
25      m_ram(*this, "ram"),
2624      m_maincpu(*this, "maincpu"),
2725      m_eeprom(*this, "eeprom"),
2826      m_gfxdecode(*this, "gfxdecode"),
2927      m_palette(*this, "lpalette"),
3028      m_palette2(*this, "rpalette"),
3129      m_lscreen(*this, "lscreen"),
32      m_rscreen(*this, "rscreen")
30      m_rscreen(*this, "rscreen"),
31      m_keys(*this, "KEY")
3332   { }
3433
3534   /* memory pointers */
r31802r31803
3837   required_shared_ptr<UINT32> m_bgpen_1;
3938   required_shared_ptr<UINT32> m_bgpen_2;
4039   required_shared_ptr<UINT32> m_paletteram;
41   required_shared_ptr<UINT32> m_io_select;
42   required_shared_ptr<UINT32> m_ram;
4340
41   memory_bank *m_ymf_bank[4];
42   UINT8 m_ymf_max_bank;
43   UINT8 m_io_select;
44
4445   /* video-related */
4546   double         m_oldbrt1;
4647   double         m_oldbrt2;
r31802r31803
5354   required_device<palette_device> m_palette2;
5455   required_device<screen_device> m_lscreen;
5556   required_device<screen_device> m_rscreen;
57   optional_ioport_array<8> m_keys;
5658
5759   DECLARE_WRITE32_MEMBER(ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w);
5860   DECLARE_WRITE32_MEMBER(ps4_bgpen_1_dword_w);
r31802r31803
6062   DECLARE_WRITE32_MEMBER(ps4_screen1_brt_w);
6163   DECLARE_WRITE32_MEMBER(ps4_screen2_brt_w);
6264   DECLARE_WRITE32_MEMBER(ps4_vidregs_w);
63   DECLARE_WRITE32_MEMBER(hotgmck_pcm_bank_w);
64   DECLARE_CUSTOM_INPUT_MEMBER(system_port_r);
65   DECLARE_WRITE32_MEMBER(io_select_w);
6566   DECLARE_CUSTOM_INPUT_MEMBER(mahjong_ctrl_r);
6667   DECLARE_WRITE32_MEMBER(ps4_eeprom_w);
6768   DECLARE_READ32_MEMBER(ps4_eeprom_r);
68   DECLARE_DRIVER_INIT(hotgmck);
6969   virtual void machine_start();
7070   virtual void machine_reset();
7171   virtual void video_start();
7272   UINT32 screen_update_psikyo4_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
7373   UINT32 screen_update_psikyo4_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
7474   INTERRUPT_GEN_MEMBER(psikyosh_interrupt);
75   void hotgmck_pcm_bank_postload();
7675   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32 scr);
77   void set_hotgmck_pcm_bank( int n );
78   void install_hotgmck_pcm_bank();
7976   DECLARE_WRITE_LINE_MEMBER(irqhandler);
8077};
trunk/src/mame/includes/psikyosh.h
r31802r31803
6262   DECLARE_READ32_MEMBER(mjgtaste_input_r);
6363   DECLARE_WRITE32_MEMBER(psh_eeprom_w);
6464   DECLARE_READ32_MEMBER(psh_eeprom_r);
65   DECLARE_DRIVER_INIT(gnbarich);
66   DECLARE_DRIVER_INIT(daraku);
67   DECLARE_DRIVER_INIT(soldivid);
68   DECLARE_DRIVER_INIT(s1945iii);
65   DECLARE_DRIVER_INIT(ps3);
66   DECLARE_DRIVER_INIT(ps5);
6967   DECLARE_DRIVER_INIT(mjgtaste);
70   DECLARE_DRIVER_INIT(tgm2);
71   DECLARE_DRIVER_INIT(sbomberb);
72   DECLARE_DRIVER_INIT(dragnblz);
73   DECLARE_DRIVER_INIT(gunbird2);
74   DECLARE_DRIVER_INIT(s1945ii);
7568   virtual void machine_start();
7669   virtual void video_start();
7770   void ps3_init();
trunk/src/mame/video/psikyo4.c
r31802r31803
5555   UINT32 *source = m_spriteram;
5656   UINT16 *list = (UINT16 *)m_spriteram.target() + 0x2c00/2 + 0x04/2; /* 0x2c00/0x2c02 what are these for, pointers? one for each screen */
5757   UINT16 listlen = (0xc00/2 - 0x04/2), listcntr = 0;
58   int flipscreen1, flipscreen2;
58   bool flipscreen = BIT(m_vidregs[1], (scr == 0 ? 31 : 23));
59   int screen_height = (scr == 0 ? m_lscreen : m_rscreen)->visible_area().max_y + 1;
5960
60   flipscreen1 = (((m_vidregs[1] >> 30) & 2) == 2) ? 1 : 0;
61   flipscreen2 = (((m_vidregs[1] >> 22) & 2) == 2) ? 1 : 0;
62
6361   while (listcntr < listlen)
6462   {
65      UINT16 listdat, sprnum, thisscreen;
63      UINT16 listdat, sprnum;
6664
6765      listdat = list[BYTE_XOR_BE(listcntr)];
6866      sprnum = (listdat & 0x03ff) * 2;
6967
70      thisscreen = 0;
71      if ((listdat & 0x2000) == scr) thisscreen = 1;
72
7368      /* start drawing */
74      if (!(listdat & 0x8000) && thisscreen) /* draw only selected screen */
69      if ((listdat & 0x8000) == 0 && (listdat & 0x2000) == scr) /* draw only selected screen */
7570      {
7671         int loopnum = 0, i, j;
7772         UINT32 xpos, ypos, tnum, wide, high, colr, flipx, flipy;
r31802r31803
9388         if (ypos & 0x200) ypos -= 0x400;
9489         if (xpos & 0x200) xpos -= 0x400;
9590
96         if ((!scr && flipscreen1) || (scr && flipscreen2))
91         if (flipscreen)
9792         {
9893            /* Screen Height depends on game */
99            (!scr && flipscreen1) ? ypos = m_lscreen->visible_area().max_y + 1 - ypos - high * 16 : ypos = m_rscreen->visible_area().max_y + 1 - ypos - high * 16;
94            ypos = screen_height - ypos - high * 16;
10095            xpos = 40 * 8 - xpos - wide * 16;
10196            flipx = !flipx;
10297            flipy = !flipy;
trunk/src/emu/sound/ymf278b.c
r31802r31803
6363   - LFO (vibrato, tremolo)
6464   - integrate YMF262 (used by Fuuki games, not used by Psikyo and Metro games)
6565   - able to hook up "Moonsound", supporting mixed ROM+RAM (for MSX driver in MESS)
66     (this should be possible now by using a custom address map?)
6667*/
6768
6869#include "emu.h"
r31802r31803
7172#define VERBOSE 0
7273#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
7374
74void ymf278b_device::write_memory(UINT32 offset, UINT8 data)
75{
76   logerror("YMF278B:  Memory write %02x to %x\n", data, offset);
77}
7875
79UINT8 ymf278b_device::read_memory(UINT32 offset)
80{
81   if (offset >= m_romsize)
82   {
83      // logerror("YMF278B:  Memory read overflow %x\n", offset);
84      return 0xff;
85   }
86   return m_rom[offset];
87}
76// default address map
77static ADDRESS_MAP_START( ymf278b, AS_0, 8, ymf278b_device )
78        AM_RANGE(0x000000, 0x3fffff) AM_ROM
79ADDRESS_MAP_END
8880
8981
9082/**************************************************************************/
r31802r31803
276268            {
277269               // 8 bit
278270               case 0:
279                  sample = read_memory(slot->startaddr + (slot->stepptr>>16))<<8;
271                  sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>16))<<8;
280272                  break;
281273
282274               // 12 bit
283275               case 1:
284276                  if (slot->stepptr & 0x10000)
285                     sample = read_memory(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 |
286                        (read_memory(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0);
277                     sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 |
278                        (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0);
287279                  else
288                     sample = read_memory(slot->startaddr + (slot->stepptr>>17)*3)<<8 |
289                        (read_memory(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0);
280                     sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 |
281                        (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0);
290282                  break;
291283
292284               // 16 bit
293285               case 2:
294                  sample = read_memory(slot->startaddr + ((slot->stepptr>>16)*2))<<8 |
295                     read_memory(slot->startaddr + ((slot->stepptr>>16)*2)+1);
286                  sample = m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 |
287                     m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1);
296288                  break;
297289
298290               // ?? bit, effect is unknown, datasheet says it's prohibited
r31802r31803
506498            else
507499               offset = m_wavetblhdr*0x80000 + (slot->wave - 384) * 12;
508500            for (i = 0; i < 12; i++)
509               p[i] = read_memory(offset+i);
501               p[i] = m_direct->read_raw_byte(offset+i);
510502
511503            slot->bits = (p[0]&0xc0)>>6;
512504            slot->startaddr = (p[2] | (p[1]<<8) | ((p[0]&0x3f)<<16));
r31802r31803
666658            break;
667659
668660         case 0x06:
669            // memory data (ignored, we don't support RAM)
670            write_memory(m_memadr, data);
661            // memory data
662            m_addrspace[0]->write_byte(m_memadr, data);
671663            m_memadr = (m_memadr + 1) & 0x3fffff;
672664            break;
673665
r31802r31803
778770               ret = (m_pcmregs[m_port_C] & 0x1f) | 0x20; // device ID in upper bits
779771               break;
780772            case 6:
781               ret = read_memory(m_memadr);
773               ret = m_direct->read_raw_byte(m_memadr);
782774               m_memadr = (m_memadr + 1) & 0x3fffff;
783775               break;
784776
r31802r31803
954946{
955947   int i;
956948
957   m_rom = *region();
958   m_romsize = region()->bytes();
949   m_direct = &space().direct();
959950   m_clock = clock();
960951   m_irq_handler.resolve();
961952
r31802r31803
1004995ymf278b_device::ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1005996   : device_t(mconfig, YMF278B, "YMF278B", tag, owner, clock, "ymf278b", __FILE__),
1006997      device_sound_interface(mconfig, *this),
998      device_memory_interface(mconfig, *this),
999      m_space_config("samples", ENDIANNESS_BIG, 8, 22, 0, NULL),
10071000      m_irq_handler(*this)
10081001{
1002   m_address_map[0] = *ADDRESS_MAP_NAME(ymf278b);
10091003}
10101004
10111005//-------------------------------------------------
trunk/src/emu/sound/ymf278b.h
r31802r31803
1111   devcb = &ymf278b_device::set_irq_handler(*device, DEVCB_##_devcb);
1212
1313class ymf278b_device : public device_t,
14                           public device_sound_interface
14                  public device_sound_interface,
15                  public device_memory_interface
1516{
1617public:
1718   ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
r31802r31803
3031
3132   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
3233
34   // device_memory_interface overrides
35   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_0) ? &m_space_config : NULL; }
36
3337   // sound stream update overrides
3438   virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
3539
r31802r31803
7579      int num;        /* slot number (for debug only) */
7680   };
7781
78   void write_memory(UINT32 offset, UINT8 data);
79   UINT8 read_memory(UINT32 offset);
8082   int compute_rate(YMF278BSlot *slot, int val);
8183   UINT32 compute_decay_env_vol_step(YMF278BSlot *slot, int val);
8284   void compute_freq_step(YMF278BSlot *slot);
r31802r31803
120122   INT32 m_mix_level[8];
121123
122124   emu_timer *m_timer_a, *m_timer_b;
123   const UINT8 *m_rom;
124   UINT32 m_romsize;
125125   int m_clock;
126126
127127   sound_stream * m_stream;
128128   INT32 *m_mix_buffer;
129   direct_read_data * m_direct;
130   const address_space_config m_space_config;
129131   devcb_write_line m_irq_handler;
130132};
131133

Previous 199869 Revisions Next


© 1997-2024 The MAME Team