yunsun16.c: use device address map for the oki (nw)

This commit is contained in:
Osso 2014-12-02 21:34:54 +01:00
parent b9d27cd05a
commit c4b2c68ca4
3 changed files with 64 additions and 54 deletions

View File

@ -101,15 +101,9 @@ Stephh's notes (based on the games M68000 code and some tests) :
***************************************************************************/
WRITE16_MEMBER(yunsun16_state::yunsun16_sound_bank_w)
WRITE8_MEMBER(yunsun16_state::sound_bank_w)
{
if (ACCESSING_BITS_0_7)
{
int bank = data & 3;
UINT8 *dst = memregion("oki")->base();
UINT8 *src = dst + 0x80000 + 0x20000 * bank;
memcpy(dst + 0x20000, src, 0x20000);
}
membank("okibank")->set_entry(data & 3);
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, yunsun16_state )
@ -126,12 +120,12 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, yunsun16_state )
AM_RANGE(0x80010c, 0x80010f) AM_RAM AM_SHARE("scrollram_1") // Scrolling
AM_RANGE(0x800114, 0x800117) AM_RAM AM_SHARE("scrollram_0") // Scrolling
AM_RANGE(0x800154, 0x800155) AM_RAM AM_SHARE("priorityram") // Priority
AM_RANGE(0x800180, 0x800181) AM_WRITE(yunsun16_sound_bank_w) // Sound
AM_RANGE(0x800180, 0x800181) AM_WRITE8(sound_bank_w, 0x00ff) // Sound
AM_RANGE(0x800188, 0x800189) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) // Sound
AM_RANGE(0x8001fe, 0x8001ff) AM_WRITENOP // ? 0 (during int)
AM_RANGE(0x900000, 0x903fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette
AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(yunsun16_vram_1_w) AM_SHARE("vram_1") // Layer 1
AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(yunsun16_vram_0_w) AM_SHARE("vram_0") // Layer 0
AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1
AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // Layer 0
AM_RANGE(0x910000, 0x910fff) AM_RAM AM_SHARE("spriteram") // Sprites
AM_RANGE(0xff0000, 0xffffff) AM_RAM
ADDRESS_MAP_END
@ -155,8 +149,8 @@ number 0 on each voice. That sample is 00000-00000.
DRIVER_INIT_MEMBER(yunsun16_state,magicbub)
{
// remove_mem_write16_handler (0, 0x800180, 0x800181 );
m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w),this));
m_maincpu->space(AS_PROGRAM).unmap_write(0x800180, 0x800181);
m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w), this));
}
/***************************************************************************
@ -179,6 +173,11 @@ static ADDRESS_MAP_START( sound_port_map, AS_IO, 8, yunsun16_state )
AM_RANGE(0x1c, 0x1c) AM_DEVREADWRITE("oki", okim6295_device, read, write) // M6295
ADDRESS_MAP_END
static ADDRESS_MAP_START( oki_map, AS_0, 8, yunsun16_state )
AM_RANGE(0x00000, 0x1ffff) AM_ROM
AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
ADDRESS_MAP_END
/***************************************************************************
@ -566,6 +565,19 @@ void yunsun16_state::machine_reset()
m_sprites_scrolldy = -0x0f;
}
MACHINE_START_MEMBER(yunsun16_state, shocking)
{
machine_start();
membank("okibank")->configure_entries(0, 0x80000 / 0x20000, memregion("oki")->base(), 0x20000);
membank("okibank")->set_entry(0);
}
MACHINE_RESET_MEMBER(yunsun16_state, shocking)
{
machine_reset();
membank("okibank")->set_entry(0);
}
/***************************************************************************
Magic Bubble
***************************************************************************/
@ -622,7 +634,9 @@ static MACHINE_CONFIG_START( shocking, yunsun16_state )
MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", yunsun16_state, irq2_line_hold)
MCFG_MACHINE_START_OVERRIDE(yunsun16_state, shocking)
MCFG_MACHINE_RESET_OVERRIDE(yunsun16_state, shocking)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -640,6 +654,7 @@ static MACHINE_CONFIG_START( shocking, yunsun16_state )
MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MACHINE_CONFIG_END
@ -786,11 +801,8 @@ ROM_START( magicbubb ) /* Found on a YS-0211 PCB like below */
ROM_LOAD( "u22.bin", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
ROM_LOAD( "u23.bin", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "u131", 0x000000, 0x040000, CRC(9bdb08e4) SHA1(4d8bdeb9b503b0959a6ae3f3fb3574350b01b1a1) )
ROM_RELOAD( 0x040000, 0x040000 )
ROM_RELOAD( 0x080000, 0x040000 )
ROM_RELOAD( 0x0c0000, 0x040000 )
ROM_END
@ -862,10 +874,9 @@ ROM_START( paprazzi )
ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(436499c7) SHA1(ec1390b6d5656c99d91cf6425d319f4796bcb28a) )
ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(358280fe) SHA1(eac3cb65fe75bc2da14896734f4a339480b54a2c) )
ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "u131.bin", 0x000000, 0x080000, CRC(bcf7aa12) SHA1(f7bf5258396ed0eb7e85eccf250c6d0a333a4d61) )
ROM_RELOAD( 0x080000, 0x080000 )
ROM_END
/***************************************************************************
@ -892,10 +903,9 @@ ROM_START( shocking )
ROM_LOAD( "yunsun16.u22", 0x080000, 0x040000, CRC(d6db0388) SHA1(f5d8f7740b602c402a8dd6c4ebd357cf15a0dfac) )
ROM_LOAD( "yunsun16.u23", 0x0c0000, 0x040000, CRC(1fa33b2e) SHA1(4aa0dee8d34aac19cf6b7ba3f79ca022ad8d7760) )
ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) )
ROM_RELOAD( 0x080000, 0x080000 )
ROM_END
ROM_START( shockingk )
@ -916,10 +926,9 @@ ROM_START( shockingk )
ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(59260de1) SHA1(2dd2d7ab93fa751cb9142400a3ff91391477d555) )
ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(00e4af23) SHA1(a4d23f16748385dd8c87cae3e16593e5a0195c24) )
ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) )
ROM_RELOAD( 0x080000, 0x080000 )
ROM_END
@ -949,10 +958,9 @@ ROM_START( bombkick )
ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) )
ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) )
ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) )
ROM_RELOAD( 0x080000, 0x080000 )
ROM_END
ROM_START( bombkicka ) // marked 'Bomb Kick 98'
@ -973,10 +981,9 @@ ROM_START( bombkicka ) // marked 'Bomb Kick 98'
ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) )
ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) )
ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) )
ROM_RELOAD( 0x080000, 0x080000 )
ROM_END
/***************************************************************************

View File

@ -9,18 +9,25 @@ class yunsun16_state : public driver_device
public:
yunsun16_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_vram_0(*this, "vram_0"),
m_vram_1(*this, "vram_1"),
m_scrollram_0(*this, "scrollram_0"),
m_scrollram_1(*this, "scrollram_1"),
m_priorityram(*this, "priorityram"),
m_spriteram(*this, "spriteram"),
m_audiocpu(*this, "audiocpu"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
m_spriteram(*this, "spriteram") { }
/* devices */
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
/* memory pointers */
required_shared_ptr<UINT16> m_vram_0;
required_shared_ptr<UINT16> m_vram_1;
@ -36,14 +43,14 @@ public:
int m_sprites_scrolldx;
int m_sprites_scrolldy;
/* devices */
optional_device<cpu_device> m_audiocpu;
DECLARE_WRITE16_MEMBER(yunsun16_sound_bank_w);
DECLARE_WRITE8_MEMBER(sound_bank_w);
DECLARE_WRITE16_MEMBER(magicbub_sound_command_w);
DECLARE_WRITE16_MEMBER(yunsun16_vram_0_w);
DECLARE_WRITE16_MEMBER(yunsun16_vram_1_w);
DECLARE_WRITE16_MEMBER(vram_0_w);
DECLARE_WRITE16_MEMBER(vram_1_w);
DECLARE_DRIVER_INIT(magicbub);
TILEMAP_MAPPER_MEMBER(yunsun16_tilemap_scan_pages);
DECLARE_MACHINE_START(shocking);
DECLARE_MACHINE_RESET(shocking);
TILEMAP_MAPPER_MEMBER(tilemap_scan_pages);
TILE_GET_INFO_MEMBER(get_tile_info_0);
TILE_GET_INFO_MEMBER(get_tile_info_1);
virtual void machine_start();
@ -52,8 +59,4 @@ public:
UINT32 screen_update_yunsun16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
DECLARE_WRITE_LINE_MEMBER(soundirq);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
};

View File

@ -38,7 +38,7 @@
#define PAGES_PER_TMAP_X (0x4)
#define PAGES_PER_TMAP_Y (0x4)
TILEMAP_MAPPER_MEMBER(yunsun16_state::yunsun16_tilemap_scan_pages)
TILEMAP_MAPPER_MEMBER(yunsun16_state::tilemap_scan_pages)
{
return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X +
(row % TILES_PER_PAGE_Y) +
@ -67,13 +67,13 @@ TILE_GET_INFO_MEMBER(yunsun16_state::get_tile_info_1)
(attr & 0x20) ? TILE_FLIPX : 0);
}
WRITE16_MEMBER(yunsun16_state::yunsun16_vram_0_w)
WRITE16_MEMBER(yunsun16_state::vram_0_w)
{
COMBINE_DATA(&m_vram_0[offset]);
m_tilemap_0->mark_tile_dirty(offset / 2);
}
WRITE16_MEMBER(yunsun16_state::yunsun16_vram_1_w)
WRITE16_MEMBER(yunsun16_state::vram_1_w)
{
COMBINE_DATA(&m_vram_1[offset]);
m_tilemap_1->mark_tile_dirty(offset / 2);
@ -90,9 +90,9 @@ WRITE16_MEMBER(yunsun16_state::yunsun16_vram_1_w)
void yunsun16_state::video_start()
{
m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this),
m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this),
16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this),
m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this),
16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
m_tilemap_0->set_scrolldx(-0x34, 0);