From 9ffb107e66f79c3cefe270676751f2246f6f10f5 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 9 Aug 2024 18:16:15 +0200 Subject: New working clones ------------------ Umi de Poker / Marine Paradise (Japan, newer) [Ioannis Bampulas] --- src/mame/mame.lst | 1 + src/mame/misc/umipoker.cpp | 158 +++++++++++++++++++++++------------------- src/mame/skeleton/whtm68k.cpp | 35 ++++++++-- src/mame/universal/cosmic.cpp | 3 +- 4 files changed, 119 insertions(+), 78 deletions(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 140654a765e..40dcc085313 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -32175,6 +32175,7 @@ twinbskt // (c) 1995 Recreativos Pasqual @source:misc/umipoker.cpp saiyukip // umipoker // +umipokera // @source:misc/unkgolf.cpp unkgolf diff --git a/src/mame/misc/umipoker.cpp b/src/mame/misc/umipoker.cpp index 4d7f8330509..172a4a45b07 100644 --- a/src/mame/misc/umipoker.cpp +++ b/src/mame/misc/umipoker.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Angelo Salese, Roberto Fresca +// copyright-holders: Angelo Salese, Roberto Fresca + /*************************************************************************** Umi de Poker (c) 1997 World Station Co.,LTD @@ -42,11 +43,12 @@ class umipoker_state : public driver_device public: umipoker_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) - , m_vram(*this, "vram.%u", 0U) - , m_z80_wram(*this, "z80_wram") , m_maincpu(*this, "maincpu") , m_gfxdecode(*this, "gfxdecode") , m_palette(*this, "palette") + , m_vram(*this, "vram.%u", 0U) + , m_z80_wram(*this, "z80_wram") + , m_z80_rom(*this, "audiocpu") { } @@ -55,6 +57,20 @@ public: protected: virtual void video_start() override; + required_device m_maincpu; + + void main_map(address_map &map); + +private: + required_device m_gfxdecode; + required_device m_palette; + required_shared_ptr_array m_vram; + required_shared_ptr m_z80_wram; + required_region_ptr m_z80_rom; + + tilemap_t *m_tilemap[4]{}; + uint16_t m_scrolly[4]{}; + uint8_t z80_rom_readback_r(offs_t offset); uint8_t z80_shared_ram_r(offs_t offset); void z80_shared_ram_w(offs_t offset, uint8_t data); @@ -67,16 +83,6 @@ protected: void audio_io_map(address_map &map); void audio_map(address_map &map); - void umipoker_map(address_map &map); - - required_shared_ptr_array m_vram; - required_shared_ptr m_z80_wram; - required_device m_maincpu; - required_device m_gfxdecode; - required_device m_palette; - - tilemap_t *m_tilemap[4]{}; - int m_scrolly[4]{}; }; class saiyukip_state : public umipoker_state @@ -97,7 +103,7 @@ private: void lamps_w(uint16_t data); void saiyu_counters_w(uint16_t data); - void saiyukip_map(address_map &map); + void main_map(address_map &map); output_finder<6> m_lamps; }; @@ -105,21 +111,18 @@ private: template TILE_GET_INFO_MEMBER(umipoker_state::get_tile_info) { - int tile = m_vram[Which][tile_index*2+0]; - int color = m_vram[Which][tile_index*2+1] & 0x3f; + int const tile = m_vram[Which][tile_index * 2 + 0]; + int const color = m_vram[Which][tile_index * 2 + 1] & 0x3f; - tileinfo.set(0, - tile, - color, - 0); + tileinfo.set(0, tile, color, 0); } void umipoker_state::video_start() { - m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 8,8, 64,32); - m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 8,8, 64,32); - m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<2>)), TILEMAP_SCAN_ROWS, 8,8, 64,32); - m_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<3>)), TILEMAP_SCAN_ROWS, 8,8, 64,32); + m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + m_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(umipoker_state::get_tile_info<3>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_tilemap[0]->set_transparent_pen(0); m_tilemap[1]->set_transparent_pen(0); @@ -139,19 +142,17 @@ uint32_t umipoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitm bitmap.fill(m_palette->black_pen(), cliprect); - m_tilemap[0]->draw(screen, bitmap, cliprect, 0,0); - m_tilemap[1]->draw(screen, bitmap, cliprect, 0,0); - m_tilemap[2]->draw(screen, bitmap, cliprect, 0,0); - m_tilemap[3]->draw(screen, bitmap, cliprect, 0,0); + m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap[2]->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap[3]->draw(screen, bitmap, cliprect, 0, 0); return 0; } uint8_t umipoker_state::z80_rom_readback_r(offs_t offset) { - uint8_t *ROM = memregion("audiocpu")->base(); - - return ROM[offset]; + return m_z80_rom[offset]; } uint8_t umipoker_state::z80_shared_ram_r(offs_t offset) @@ -172,9 +173,9 @@ void umipoker_state::irq_ack_w(uint16_t data) { m_maincpu->set_input_line(6, CLEAR_LINE); - /* shouldn't happen */ - if(data) - popmessage("%04x IRQ ACK, contact MAMEdev",data); + // shouldn't happen + if (data) + popmessage("%04x IRQ ACK, contact MAMEdev", data); } template @@ -280,7 +281,7 @@ void saiyukip_state::saiyu_counters_w(uint16_t data) } -void umipoker_state::umipoker_map(address_map &map) +void umipoker_state::main_map(address_map &map) { map.unmap_value_low(); map(0x000000, 0x03ffff).rom(); @@ -308,9 +309,9 @@ void umipoker_state::umipoker_map(address_map &map) map(0xe0002e, 0xe0002f).w(FUNC(umipoker_state::scrolly_w<3>)); } -void saiyukip_state::saiyukip_map(address_map &map) +void saiyukip_state::main_map(address_map &map) { - umipoker_map(map); + umipoker_state::main_map(map); map(0xe0000c, 0xe0000d).w(FUNC(saiyukip_state::lamps_w)); map(0xe00010, 0xe00011).w(FUNC(saiyukip_state::saiyu_counters_w)); } @@ -460,7 +461,7 @@ static INPUT_PORTS_START( umipoker ) PORT_DIPSETTING( 0x0030, "30000" ) PORT_DIPSETTING( 0x0038, "50000" ) PORT_DIPSETTING( 0x0000, "999999" ) - PORT_DIPNAME( 0x0040, 0x0040, "Out Coin Counter" ) PORT_DIPLOCATION("DSW3:!7") /* Conditional to 'Hopper Sub-Board' (DSW4-3) */ + PORT_DIPNAME( 0x0040, 0x0040, "Out Coin Counter" ) PORT_DIPLOCATION("DSW3:!7") // Conditional to 'Hopper Sub-Board' (DSW4-3) PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) PORT_DIPNAME( 0x0080, 0x0080, "Credit Cut" ) PORT_DIPLOCATION("DSW3:!8") @@ -472,7 +473,7 @@ static INPUT_PORTS_START( umipoker ) PORT_DIPSETTING( 0x0100, "B Type" ) PORT_DIPSETTING( 0x0200, "C Type" ) PORT_DIPSETTING( 0x0300, "D Type" ) - PORT_DIPNAME( 0x0400, 0x0400, "Hopper Sub-Board" ) PORT_DIPLOCATION("DSW4:!3") /* When off, allow set the 'Out Coin Counter' (DSW3-7) */ + PORT_DIPNAME( 0x0400, 0x0400, "Hopper Sub-Board" ) PORT_DIPLOCATION("DSW4:!3") // When off, allow set the 'Out Coin Counter' (DSW3-7) PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0400, "Use" ) PORT_DIPNAME( 0x0800, 0x0000, "Title Type" ) PORT_DIPLOCATION("DSW4:!4") @@ -486,7 +487,7 @@ static INPUT_PORTS_START( umipoker ) PORT_DIPNAME( 0x4000, 0x4000, "Fever Initialize" ) PORT_DIPLOCATION("DSW4:!7") PORT_DIPSETTING( 0x0000, "A Type" ) PORT_DIPSETTING( 0x4000, "B Type" ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW4:!8") /* Unmapped?... */ + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW4:!8") // Unmapped?... PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) INPUT_PORTS_END @@ -601,10 +602,10 @@ static INPUT_PORTS_START( saiyukip ) PORT_DIPNAME( 0x1000, 0x1000, "Hopper" ) PORT_DIPLOCATION("DSW4:!5") PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, "Medal Sub-Board" ) PORT_DIPLOCATION("DSW4:!6") /* When off, allow 'Out Counter' to be set */ + PORT_DIPNAME( 0x2000, 0x2000, "Medal Sub-Board" ) PORT_DIPLOCATION("DSW4:!6") // When off, allow 'Out Counter' to be set PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, "Out Counter" ) PORT_DIPLOCATION("DSW4:!7") /* Conditional to 'Medal Sub-Board' */ + PORT_DIPNAME( 0x4000, 0x4000, "Out Counter" ) PORT_DIPLOCATION("DSW4:!7") // Conditional to 'Medal Sub-Board' PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) PORT_DIPNAME( 0x8000, 0x8000, "Credit Over Cut" ) PORT_DIPLOCATION("DSW4:!8") @@ -613,19 +614,8 @@ static INPUT_PORTS_START( saiyukip ) INPUT_PORTS_END -static const gfx_layout layout_8x8x4 = -{ - 8,8, - RGN_FRAC(1,4), - 4, - { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, - { STEP8(0,1) }, - { STEP8(0,8) }, - 8*8 -}; - static GFXDECODE_START( gfx_umipoker ) - GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x4, 0, 0x40) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_planar, 0, 0x40) GFXDECODE_END void saiyukip_state::machine_start() @@ -638,9 +628,9 @@ void saiyukip_state::machine_start() // TODO: Verify clocks (XTALs are 14.3181 and 2.000MHz) void umipoker_state::umipoker(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware M68000(config, m_maincpu, XTAL(14'318'181)); // TMP68HC000-16 - m_maincpu->set_addrmap(AS_PROGRAM, &umipoker_state::umipoker_map); + m_maincpu->set_addrmap(AS_PROGRAM, &umipoker_state::main_map); z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181) / 4)); // 3.579545MHz audiocpu.set_addrmap(AS_PROGRAM, &umipoker_state::audio_map); @@ -648,7 +638,7 @@ void umipoker_state::umipoker(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -661,7 +651,7 @@ void umipoker_state::umipoker(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_umipoker); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x400); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); ym3812_device &ym(YM3812(config, "ym", XTAL(14'318'181) / 4)); // 3.579545MHz @@ -675,7 +665,7 @@ void umipoker_state::umipoker(machine_config &config) void saiyukip_state::saiyukip(machine_config &config) { umipoker(config); - m_maincpu->set_addrmap(AS_PROGRAM, &saiyukip_state::saiyukip_map); + m_maincpu->set_addrmap(AS_PROGRAM, &saiyukip_state::main_map); } @@ -685,7 +675,30 @@ void saiyukip_state::saiyukip(machine_config &config) ***************************************************************************/ -ROM_START( umipoker ) +ROM_START( umipoker ) // W-ONE 1995-08 PCB + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "p0.u61", 0x000000, 0x020000, CRC(3a0c4a8b) SHA1(009cbbd4df68e31dc683a8cd3425e5f8b986fa92) ) + ROM_LOAD16_BYTE( "p1.u60", 0x000001, 0x020000, CRC(44f475cb) SHA1(0c5044331dbcc617d200d052b4597dd4551fc95c) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "sz.u8", 0x000000, 0x010000, CRC(d874ba1a) SHA1(13c06f3b67694d5d5194023c4f7b75aea8b57129) ) // second half 1-filled + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "sg3.u39", 0x000000, 0x020000, CRC(ebd5f96d) SHA1(968c107ee17f1e92ffc2835e13803347881862f1) ) + ROM_LOAD( "sg2.u40", 0x020000, 0x020000, CRC(eb31649b) SHA1(c0741d85537827e2396e81a1aa3005871dffad78) ) + ROM_LOAD( "sg1.u41", 0x040000, 0x020000, CRC(7fcbfb17) SHA1(be2f308a8e8f0941c54125950702ddfbd8538733) ) + ROM_LOAD( "sg0.u42", 0x060000, 0x020000, CRC(876f1f4f) SHA1(eca4c397be57812f2c34791736fee7c43925d927) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "sm.u17", 0x000000, 0x040000, CRC(99503aed) SHA1(011404fad01b3ced708a94143908be3e1d0194d3) ) // first half 1-filled + ROM_CONTINUE( 0x000000, 0x040000 ) + + ROM_REGION( 0x400, "plds", ROMREGION_ERASE00 ) + ROM_LOAD( "gal16v8b.u11", 0x000, 0x117, NO_DUMP ) + ROM_LOAD( "gal16v8b.u24", 0x200, 0x117, NO_DUMP ) +ROM_END + +ROM_START( umipokera ) ROM_REGION( 0x40000, "maincpu", 0 ) ROM_LOAD16_BYTE( "sp0.u61", 0x000000, 0x020000, CRC(866eaa02) SHA1(445afdfe010aad1102219a0dbd3a363a22294b4c) ) ROM_LOAD16_BYTE( "sp1.u60", 0x000001, 0x020000, CRC(8db08696) SHA1(2854d511a8fd30b023e2a2a00b25413f88205d82) ) @@ -694,10 +707,10 @@ ROM_START( umipoker ) ROM_LOAD( "sz.u8", 0x000000, 0x010000, CRC(d874ba1a) SHA1(13c06f3b67694d5d5194023c4f7b75aea8b57129) ) // second half 1-filled ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD( "sg0.u42", 0x000000, 0x020000, CRC(876f1f4f) SHA1(eca4c397be57812f2c34791736fee7c43925d927) ) - ROM_LOAD( "sg1.u41", 0x020000, 0x020000, CRC(7fcbfb17) SHA1(be2f308a8e8f0941c54125950702ddfbd8538733) ) - ROM_LOAD( "sg2.u40", 0x040000, 0x020000, CRC(eb31649b) SHA1(c0741d85537827e2396e81a1aa3005871dffad78) ) - ROM_LOAD( "sg3.u39", 0x060000, 0x020000, CRC(ebd5f96d) SHA1(968c107ee17f1e92ffc2835e13803347881862f1) ) + ROM_LOAD( "sg3.u39", 0x000000, 0x020000, CRC(ebd5f96d) SHA1(968c107ee17f1e92ffc2835e13803347881862f1) ) + ROM_LOAD( "sg2.u40", 0x020000, 0x020000, CRC(eb31649b) SHA1(c0741d85537827e2396e81a1aa3005871dffad78) ) + ROM_LOAD( "sg1.u41", 0x040000, 0x020000, CRC(7fcbfb17) SHA1(be2f308a8e8f0941c54125950702ddfbd8538733) ) + ROM_LOAD( "sg0.u42", 0x060000, 0x020000, CRC(876f1f4f) SHA1(eca4c397be57812f2c34791736fee7c43925d927) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "sm.u17", 0x000000, 0x040000, CRC(99503aed) SHA1(011404fad01b3ced708a94143908be3e1d0194d3) ) // first half 1-filled @@ -713,23 +726,24 @@ ROM_START( saiyukip ) ROM_LOAD( "slz.u8", 0x000000, 0x010000, CRC(4f32ba1c) SHA1(8f1f8c0995bcd05d19120dd3b64b135908caf759) ) // second half 1-filled ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD( "slg0.u42", 0x000000, 0x020000, CRC(49ba7ffd) SHA1(3bbb7656eafbd8c91c9054fca056c8fc3002ed13) ) - ROM_LOAD( "slg1.u41", 0x020000, 0x020000, CRC(59b5f399) SHA1(2b999cebcc53b3b8fd38e3034a12434d82b6fad3) ) - ROM_LOAD( "slg2.u40", 0x040000, 0x020000, CRC(fe6cd717) SHA1(65e59d88a30efd0cec642cda54e2bc38196f0231) ) - ROM_LOAD( "slg3.u39", 0x060000, 0x020000, CRC(e99b2906) SHA1(77884d2dae2e7f7cf27103aa8bbd0eaa39628993) ) + ROM_LOAD( "slg3.u39", 0x000000, 0x020000, CRC(e99b2906) SHA1(77884d2dae2e7f7cf27103aa8bbd0eaa39628993) ) + ROM_LOAD( "slg2.u40", 0x020000, 0x020000, CRC(fe6cd717) SHA1(65e59d88a30efd0cec642cda54e2bc38196f0231) ) + ROM_LOAD( "slg1.u41", 0x040000, 0x020000, CRC(59b5f399) SHA1(2b999cebcc53b3b8fd38e3034a12434d82b6fad3) ) + ROM_LOAD( "slg0.u42", 0x060000, 0x020000, CRC(49ba7ffd) SHA1(3bbb7656eafbd8c91c9054fca056c8fc3002ed13) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "slm.u17", 0x000000, 0x040000, CRC(b50eb70b) SHA1(342fcb307844f4d0a02a85b2c61e73b5e8bacd44) ) // first half 1-filled ROM_CONTINUE( 0x000000, 0x040000 ) ROM_END -} // Anonymous namespace +} // anonymous namespace /****************************************** * Game Drivers * ******************************************/ -// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT -GAME( 1997, umipoker, 0, umipoker, umipoker, umipoker_state, empty_init, ROT0, "World Station Co.,LTD", "Umi de Poker / Marine Paradise (Japan)", MACHINE_SUPPORTS_SAVE ) // title screen is toggleable thru a dsw -GAMEL( 1998, saiyukip, 0, saiyukip, saiyukip, saiyukip_state, empty_init, ROT0, "World Station Co.,LTD", "Slot Poker Saiyuki (Japan)", MACHINE_SUPPORTS_SAVE, layout_saiyukip ) +// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT +GAME( 1997, umipoker, 0, umipoker, umipoker, umipoker_state, empty_init, ROT0, "World Station Co.,LTD", "Umi de Poker / Marine Paradise (Japan, newer)", MACHINE_SUPPORTS_SAVE ) // title screen is toggleable thru a dsw +GAME( 1997, umipokera, umipoker, umipoker, umipoker, umipoker_state, empty_init, ROT0, "World Station Co.,LTD", "Umi de Poker / Marine Paradise (Japan, older)", MACHINE_SUPPORTS_SAVE ) // title screen is toggleable thru a dsw +GAMEL( 1998, saiyukip, 0, saiyukip, saiyukip, saiyukip_state, empty_init, ROT0, "World Station Co.,LTD", "Slot Poker Saiyuki (Japan)", MACHINE_SUPPORTS_SAVE, layout_saiyukip ) diff --git a/src/mame/skeleton/whtm68k.cpp b/src/mame/skeleton/whtm68k.cpp index 914e6f3f8d7..52312588ec9 100644 --- a/src/mame/skeleton/whtm68k.cpp +++ b/src/mame/skeleton/whtm68k.cpp @@ -23,6 +23,10 @@ KB89C67 (YM2413 clone) 3.579545 MHz XTAL (near KB89C67) K-665 sound chip (Oki M6295 clone) 2x 8-DIP banks + + +TODO: +- everything. Currently stops with 'BK RAM ERROR'. */ @@ -59,7 +63,8 @@ public: whtm68k_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode") + m_gfxdecode(*this, "gfxdecode"), + m_txtram(*this, "txtram") { } void unkwht(machine_config &config) ATTR_COLD; @@ -70,7 +75,12 @@ protected: private: required_device m_maincpu; required_device m_gfxdecode; + required_shared_ptr m_txtram; + + tilemap_t *m_txt_tilemap = nullptr; + TILE_GET_INFO_MEMBER(get_txt_tile_info); + void txtram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void main_program_map(address_map &map) ATTR_COLD; @@ -81,20 +91,35 @@ private: void whtm68k_state::video_start() { + m_txt_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(whtm68k_state::get_txt_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); +} + +// TODO: wrong, just to show something +TILE_GET_INFO_MEMBER(whtm68k_state::get_txt_tile_info) +{ + int const tile = m_txtram[tile_index] & 0xfff; + tileinfo.set(0, tile, 0, 0); } uint32_t whtm68k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(rgb_t::black(), cliprect); + m_txt_tilemap->draw(screen, bitmap, cliprect, 0, 0); + return 0; } +void whtm68k_state::txtram_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_txtram[offset]); + m_txt_tilemap->mark_tile_dirty(offset); +} void whtm68k_state::main_program_map(address_map &map) { map(0x000000, 0x03ffff).rom(); - map(0xd00000, 0xd03fff).ram(); + map(0xd00000, 0xd03fff).ram().w(FUNC(whtm68k_state::txtram_w)).share(m_txtram); map(0xd10000, 0xd13fff).ram(); map(0xd20000, 0xd23fff).ram(); map(0xe00000, 0xe03fff).ram(); @@ -111,7 +136,7 @@ void whtm68k_state::audio_io_map(address_map &map) map(0x8000, 0x803f).ram(); // ?? map(0xa000, 0xa000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // some kind of latch with the main CPU or inputs? Returning rand activates the sound chips. - //map(0xb000, 0xb000).lr8(NAME([this] () -> uint8_t { return machine().rand(); })); + map(0xb000, 0xb000).nopr();//lr8(NAME([this] () -> uint8_t { return machine().rand(); })); map(0xc000, 0xc001).w("ym", FUNC(ym2413_device::write)); } @@ -191,7 +216,7 @@ void whtm68k_state::unkwht(machine_config &config) // basic machine hardware M68000(config, m_maincpu, 24_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, &whtm68k_state::main_program_map); - //m_maincpu->set_vblank_int("screen", FUNC(whtm68k_state::irq2_line_hold)); + m_maincpu->set_vblank_int("screen", FUNC(whtm68k_state::irq2_line_hold)); i80c32_device &audiocpu(I80C32(config, "audiocpu", 12_MHz_XTAL)); audiocpu.set_addrmap(AS_PROGRAM, &whtm68k_state::audio_program_map); @@ -241,7 +266,7 @@ ROM_START( unkwht ) ROM_REGION( 0x60000, "tiles", 0 ) ROM_LOAD( "chs_v1.u50", 0x00000, 0x20000, CRC(dde0d62b) SHA1(bbf0d7dadbeec9036c20a4dfd64a8276c4ff1664) ) - ROM_LOAD( "chs_v2.u54", 0x20000, 0x20000, CRC(347db59c) SHA1(532d5621ea45fe569e37612f99fed46e6b6fe377) ) // the u53 socket is between u50 and u53 on PCB + ROM_LOAD( "chs_v2.u54", 0x20000, 0x20000, CRC(347db59c) SHA1(532d5621ea45fe569e37612f99fed46e6b6fe377) ) // the u54 socket is between u50 and u53 on PCB ROM_LOAD( "chs_v3.u53", 0x40000, 0x20000, CRC(36353ce4) SHA1(427c9b946398a38afae850c199438808eee96d80) ) ROM_REGION( 0x40000, "oki", 0 ) diff --git a/src/mame/universal/cosmic.cpp b/src/mame/universal/cosmic.cpp index 5938664d497..49c8c0e1e56 100644 --- a/src/mame/universal/cosmic.cpp +++ b/src/mame/universal/cosmic.cpp @@ -2,9 +2,10 @@ // copyright-holders:Nicola Salmoria, Lee Taylor /*************************************************************************** -Universal board numbers (found on the schematics) +Universal board numbers (found on the schematics / pics) Cosmic Alien - 7910 +No Man's Land - 8003 Magical Spot - 8013 Magical Spot II - 8013 Devil Zone - 8022 -- cgit v1.2.3