I have a detailed "how to convert" guide on how to approach game conversions here:
https://www.arcade-projects.com/thr...hien-to-gun-frontier-taito-f2-hardware.12882/
It covers the process I used for a Taito F2 conversion, but it's the approach you can use for any arcade hardware platform.
Just like that guide the first thing you want to do is look at the driver:
https://github.com/mamedev/mame/blob/master/src/mame/metro/metro.cpp
There are 3 things you need to compare against your target game with suitable
1. the "Address Map" aka "Memory Map. For Karate Tournament it looks like this:
Code:
void metro_upd7810_state::karatour_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM
map(0x400001, 0x400001).rw(FUNC(metro_upd7810_state::soundstatus_r), FUNC(metro_upd7810_state::soundstatus_w)); // From Sound CPU
map(0x400002, 0x400003).portr("IN0"); // Inputs
map(0x400003, 0x400003).w(FUNC(metro_upd7810_state::coin_lockout_1word_w)); // Coin Lockout
map(0x400004, 0x400005).portr("IN1"); //
map(0x400006, 0x400007).portr("DSW0"); //
map(0x40000a, 0x40000b).portr("DSW1"); //
map(0x40000c, 0x40000d).portr("IN2"); //
map(0x800000, 0x87ffff).m(m_vdp, FUNC(imagetek_i4100_device::map));
map(0x8788a9, 0x8788a9).w(FUNC(metro_upd7810_state::sound_data_w)); // To Sound CPU
map(0xf00000, 0xf0ffff).ram().mirror(0x0f0000); // RAM (mirrored)
}
^ Compare that to the address map for your potential donors. This tells you the "where" all of the major components are located virtually on the hardware. so for instance the ROM data is at 0x000000 and the RAM is at 0xF00000 If your donor isn't mapped the same way then the game code will be all messed up trying to access say the sound data and get inputs instead. you want to make sure at least the STARTING addresses (the first number of each "map" line) is the same for each device with your donor
If the address map is different it may be possible to "fix it", often this is done by changing PLDs (PALs and GALs) especially if it's the same exact PCB but with a different address map, chances are the PALs are what is causing it to be mapped differently.
2. The ROM area. If the address map is the same you'll want to make sure the donor actually had enough "space" available to fit the game code. So the donor's sound ROMs need to support the same or more space, the graphics roms need to support the same or more space and the program ROMs need to support the same or more space.
The ROM area for Karate Tournament looks like this:
Code:
ROM_START( karatour )
ROM_REGION( 0x080000, "maincpu", 0 ) // 68000 Code
ROM_LOAD16_BYTE( "2.2fab.8g", 0x000000, 0x040000, CRC(199a28d4) SHA1(ae880b5d5a1703c54e0ef27015039c7bb05eb185) ) // Hand-written label "(2) 2FAB"
ROM_LOAD16_BYTE( "3.0560.10g", 0x000001, 0x040000, CRC(b054e683) SHA1(51e28a99f87684f3e56c7a168523f94717903d79) ) // Hand-written label "(3) 0560"
ROM_REGION( 0x20000, "audiocpu", 0 ) // NEC78C10 Code
ROM_LOAD( "kt001.1i", 0x000000, 0x020000, CRC(1dd2008c) SHA1(488b6f5d15bdbc069ee2cd6d7a0980a228d2f790) ) // 11xxxxxxxxxxxxxxx = 0xFF
ROM_REGION( 0x400000, "vdp", 0 ) // Gfx + Data (Addressable by CPU & Blitter)
ROM_LOAD64_WORD( "361a04.15f", 0x000000, 0x100000, CRC(f6bf20a5) SHA1(cb4cb249eb1c106fe7ef0ace735c0cc3106f1ab7) )
ROM_LOAD64_WORD( "361a07.17d", 0x000002, 0x100000, CRC(794cc1c0) SHA1(ecfdec5874a95846c0fb7966fdd1da625d85531f) )
ROM_LOAD64_WORD( "361a05.17f", 0x000004, 0x100000, CRC(ea9c11fc) SHA1(176c4419cfe13ff019654a93cd7b0befa238bbc3) )
ROM_LOAD64_WORD( "361a06.15d", 0x000006, 0x100000, CRC(7e15f058) SHA1(267f0a5acb874d4fff3556ffa405e24724174667) )
ROM_REGION( 0x040000, "oki", 0 ) // Samples
ROM_LOAD( "8.4a06.1d", 0x000000, 0x040000, CRC(8d208179) SHA1(54a27ef155828435bc5eba60790a8584274c8b4a) ) // Hand-written label "(8) 4A06"
ROM_END
for each "ROM_REGION" you want to make sure your donor game is the same size or larger. Now sometimes the physical PCB can support more than what you see in MAME, but you wont be able to test the conversion in MAME without modifying MAME source if that's the case. If your donor is the same exact PCB then this is usually moot.
3. Finally the "Machine Config" area will tell you how the graphics, sound and other aspects of the PCB are configured for the game. Karate Tournament looks like this:
Code:
void metro_upd7810_state::karatour(machine_config &config)
{
// basic machine hardware
M68000(config, m_maincpu, 24_MHz_XTAL/2);
m_maincpu->set_addrmap(AS_PROGRAM, &metro_upd7810_state::karatour_map);
m_maincpu->set_periodic_int(FUNC(metro_upd7810_state::periodic_interrupt), attotime::from_hz(8*60)); // ?
metro_upd7810_sound(config);
// video hardware
i4100_config(config);
m_vdp->irq_cb().set_inputline(m_maincpu, M68K_IRQ_2);
m_vdp->ext_ctrl_0_cb().set(FUNC(metro_upd7810_state::ext_irq5_enable_w));
m_screen->screen_vblank().set(FUNC(metro_upd7810_state::karatour_vblank_irq));
// sound hardware
SPEAKER(config, "mono").front_center();
OKIM6295(config, m_oki, 24_MHz_XTAL/20, okim6295_device::PIN7_HIGH); // was /128.. so pin 7 not verified
m_oki->add_route(ALL_OUTPUTS, "mono", 0.10);
ym2413_device &ymsnd(YM2413(config, m_ymsnd, 3.579545_MHz_XTAL));
ymsnd.add_route(ALL_OUTPUTS, "mono", 0.90);
}
Sometimes differences are ok as the configuration may be set by jumpers or simply by the game code itself but you want to make sure that your target game and the donor are at least similar and are using the same devices but maybe configured slightly different. you'll also notice that this is the area where the address map is loaded, you can think of the address map as a sub-set of machine configuration. Again if your using the same exact PCB then the config is probably moot.
if all 3 of those areas match or are compatible, or can be made to match with code or PCB modifications then a conversion is possible.
As for the Metro hardware and Karate Tournament SPECIFICALLY. yes this conversion is possible, I've seen it, however if I recall despite PCBs being identical across a large number of games many of the address maps are different due to PLDs. These PLDs are "Registered" meaning they're difficult to dump or reverse. For this reason there are no dumps available for the Karate Tournament PLDs in the PLD Archive
https://wiki.pldarchive.co.uk/index.php?title=Arcade
As such you'll need to find a donor with a completely matching address map, I know there is one (as I said I've seen this conversion), but I don't know which game it is... but I've given you all of the information you need in this post to discover it for yourself.
there is lots of more detailed information about how to do conversions in the first post in this thread.