From 0343024061df3af5e3dbfdddea8d4d6d225c04dc Mon Sep 17 00:00:00 2001 From: David Haywood Date: Tue, 1 Mar 2016 22:43:34 +0000 Subject: [PATCH] new clones Knock Out!! (bootleg, set 3) [Paul Hogger] --- src/mame/arcade.lst | 1 + src/mame/drivers/scramble.cpp | 18 ++++++++++++++++++ src/mame/drivers/system16.cpp | 2 +- src/mame/video/segaic16.cpp | 23 ++++++++++++++++++++--- src/mame/video/segaic16.h | 7 +++++++ 5 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst index 66379683474..07dc759b0fd 100644 --- a/src/mame/arcade.lst +++ b/src/mame/arcade.lst @@ -317,6 +317,7 @@ triplep // (c) 1982 KKI / made by Sanritsu? triplepa // (c) 1982 KKI / made by Sanritsu? knockout // (c) 1982 KKK knockoutb // bootleg +knockoutc // mariner // (c) 1981 Amenip 800fath // (c) 1981 Amenip + U.S. Billiards license mars // (c) 1981 Artic diff --git a/src/mame/drivers/scramble.cpp b/src/mame/drivers/scramble.cpp index aed3f75fba1..03b2d1c89df 100644 --- a/src/mame/drivers/scramble.cpp +++ b/src/mame/drivers/scramble.cpp @@ -1796,6 +1796,23 @@ ROM_START( knockoutb ) ROM_LOAD( "ta.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) ) ROM_END +ROM_START( knockoutc ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.bin", 0x0000, 0x1000, CRC(7c386d1e) SHA1(e846a70bebd41b240758ffb2c7801fa7260b314e) ) + ROM_LOAD( "2.bin", 0x1000, 0x1000, CRC(85dc1d78) SHA1(61e82cfb5b0f0da6413713293c382ea57074e801) ) + ROM_LOAD( "3.bin", 0x2000, 0x1000, CRC(9f734d29) SHA1(430c53b9c3fa888fe45f9feeb4ad8f92011adc05) ) + ROM_LOAD( "4.bin", 0x3000, 0x1000, CRC(48e2d6cd) SHA1(7eea464b8cfef84dbad66e33dffaba9515605da6) ) + ROM_LOAD( "5.bin", 0x6000, 0x0800, CRC(26ac55ba) SHA1(876b8bf2ddb0ffb6256d1447408c8b7f7d048d9f) ) + ROM_CONTINUE( 0x5800, 0x0800 ) + + ROM_REGION( 0x1000, "gfx1", 0 ) + ROM_LOAD( "6.bin", 0x0000, 0x0800, CRC(d51cbd6f) SHA1(c3766a69a4599e54b8d7fb893e45802ec8bf6713) ) + ROM_LOAD( "7.bin", 0x0800, 0x0800, CRC(f21c0059) SHA1(b1ba87f13908e3e662de8bf444f59bd5c2009720) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ta.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) ) +ROM_END + ROM_START( mariner ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -2315,6 +2332,7 @@ GAME( 1982, triplep, 0, triplep, triplep, scramble_state, scramble_ppi GAME( 1982, triplepa, triplep, triplep, triplep, scramble_state, scramble_ppi, ROT90, "K.K. International", "Triple Punch (set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, knockout, triplep, triplep, triplep, scramble_state, scramble_ppi, ROT90, "bootleg? (KKK)", "Knock Out!! (bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, knockoutb,triplep, triplep, knockoutb,scramble_state, scramble_ppi, ROT90, "bootleg", "Knock Out!! (bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, knockoutc,triplep, triplep, knockoutb,scramble_state, scramble_ppi, ROT90, "bootleg (ESG)", "Knock Out!! (bootleg, set 3)", MACHINE_SUPPORTS_SAVE ) // ESG = Elektronik Spiel Gerate GAME( 1981, mariner, 0, mariner, scramble, scramble_state, mariner, ROT90, "Amenip", "Mariner", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) GAME( 1981, 800fath, mariner, mariner, 800fath, scramble_state, mariner, ROT90, "Amenip (US Billiards Inc. license)", "800 Fathoms", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/drivers/system16.cpp b/src/mame/drivers/system16.cpp index 00b0ce9a496..74b9d7346e4 100644 --- a/src/mame/drivers/system16.cpp +++ b/src/mame/drivers/system16.cpp @@ -2376,7 +2376,7 @@ static MACHINE_CONFIG_DERIVED( fpointbl, system16 ) MCFG_CPU_PROGRAM_MAP(fpointbl_sound_map) MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") - MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-107) + MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-112) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( tetrisbl, system16 ) diff --git a/src/mame/video/segaic16.cpp b/src/mame/video/segaic16.cpp index b551707645e..5924b3ace4a 100644 --- a/src/mame/video/segaic16.cpp +++ b/src/mame/video/segaic16.cpp @@ -384,8 +384,16 @@ segaic16_video_device::segaic16_video_device(const machine_config &mconfig, cons { memset(m_rotate, 0, sizeof(m_rotate)); memset(m_bg_tilemap, 0, sizeof(m_bg_tilemap)); + m_pagelatch_cb = segaic16_video_pagelatch_delegate(FUNC(segaic16_video_device::tilemap_16b_fill_latch), this); } +void segaic16_video_device::set_pagelatch_cb(device_t &device,segaic16_video_pagelatch_delegate newtilecb) +{ + segaic16_video_device &dev = downcast(device); + dev.m_pagelatch_cb = newtilecb; +} + + //------------------------------------------------- // static_set_gfxdecode_tag: Set the tag of the // gfx decoder @@ -403,6 +411,8 @@ void segaic16_video_device::device_start() throw device_missing_dependencies(); save_item(NAME(m_display_enable)); + + m_pagelatch_cb.bind_relative_to(*owner()); } void segaic16_video_device::device_reset() @@ -1012,6 +1022,15 @@ void tilemap_16b_draw_layer(screen_device &screen, struct tilemap_info *info, bi } + + +void segaic16_video_device::tilemap_16b_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram) +{ + latched_pageselect[i] = textram[0xe80 / 2 + i]; + latched_yscroll[i] = textram[0xe90/2 + i]; + latched_xscroll[i] = textram[0xe98/2 + i]; +} + TIMER_CALLBACK_MEMBER( segaic16_video_device::tilemap_16b_latch_values ) { struct tilemap_info *info = &m_bg_tilemap[param]; @@ -1021,9 +1040,7 @@ TIMER_CALLBACK_MEMBER( segaic16_video_device::tilemap_16b_latch_values ) /* latch the scroll and page select values */ for (i = 0; i < 4; i++) { - info->latched_pageselect[i] = textram[0xe80/2 + i]; - info->latched_yscroll[i] = textram[0xe90/2 + i]; - info->latched_xscroll[i] = textram[0xe98/2 + i]; + m_pagelatch_cb(i, info->latched_pageselect, info->latched_yscroll, info->latched_xscroll, textram); } /* set a timer to do this again next frame */ diff --git a/src/mame/video/segaic16.h b/src/mame/video/segaic16.h index ff0c4f754e1..bf01acc16a2 100644 --- a/src/mame/video/segaic16.h +++ b/src/mame/video/segaic16.h @@ -10,6 +10,10 @@ #ifndef __SEGAIC16VID_H__ #define __SEGAIC16VID_H__ +typedef device_delegate segaic16_video_pagelatch_delegate; + +#define MCFG_segaic16_video_SET_TILE_INDIRECT( _class, _method) \ + segaic16_video_device::set_pagelatch_cb(*device, segaic16_video_pagelatch_delegate(&_class::_method, #_class "::" #_method, NULL, (_class *)0)); /* tilemap systems */ @@ -100,6 +104,7 @@ public: // static configuration static void static_set_gfxdecode_tag(device_t &device, const char *tag); + static void set_pagelatch_cb(device_t &device,segaic16_video_pagelatch_delegate newtilecb); UINT8 m_display_enable; optional_shared_ptr m_tileram; @@ -117,6 +122,8 @@ public: // void draw_virtual_tilemap(screen_device &screen, struct tilemap_info *info, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16 pages, UINT16 xscroll, UINT16 yscroll, UINT32 flags, UINT32 priority); // void tilemap_16b_reset(screen_device &screen, struct tilemap_info *info); + segaic16_video_pagelatch_delegate m_pagelatch_cb; + void tilemap_16b_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram); TIMER_CALLBACK_MEMBER( tilemap_16b_latch_values ); struct rotate_info m_rotate[SEGAIC16_MAX_ROTATE];