diff options
author | 2023-09-13 17:28:21 +0200 | |
---|---|---|
committer | 2023-09-13 11:28:21 -0400 | |
commit | 86c6e83b4c2b8aca18db2565e72b03f90a25dda5 (patch) | |
tree | 4012720d16fe0db223f511178084cde9736378ef | |
parent | f1dd0d0651b6f04240c23739279e704c1c7bfabc (diff) |
efo/cedar_magnet.cpp: Add a new game, ordered the games on the driver... (#11543)
* efo/cedar_magnet.cpp: Add a new game, ordered the games on the driver, and reformatted comments
New WORKING clone
------------------------
Booby Kids (Magnet System) [Hugo Benedet, Recreativas.org]
-rw-r--r-- | src/mame/efo/cedar_magnet.cpp | 299 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 |
2 files changed, 146 insertions, 154 deletions
diff --git a/src/mame/efo/cedar_magnet.cpp b/src/mame/efo/cedar_magnet.cpp index 6b7dd381380..44f11b2937a 100644 --- a/src/mame/efo/cedar_magnet.cpp +++ b/src/mame/efo/cedar_magnet.cpp @@ -3,26 +3,26 @@ // thanks to: Ricky2001, ArcadeHacker, IFW /* - todo: - - fix sound emulation (speed needs verifying + sample playback) - - fix sprite communication / banking + TODO: + - Fix sound emulation (speed needs verifying + sample playback) + - Fix sprite communication / banking * bit "output bit 0x02 %d (IC21)" at 0x42 might be important * mag_exzi currently requires a gross hack to stop the sprite CPU crashing on startup * mag_xain sometimes leaves old sprites on the screen, probably due to a lost clear command - - fix flipscreen - - verify behavior of unknown / unused ports / interrupt sources etc. - - verify the disk images, convert to a better format that can natively store protection + - Fix flipscreen + - Verify behavior of unknown / unused ports / interrupt sources etc. + - Verify the disk images, convert to a better format that can natively store protection * RAW data also available if required * as mentioned, the disks are copy protected, see notes below - Use proper floppy drive emulation code that originally came from MESS (tied with above) - - verify all clocks and screen params (50hz seems to match original videos) - - work out why we need a protection hack and replace it with proper emulation + - Verify all clocks and screen params (50hz seems to match original videos) + - Work out why we need a protection hack and replace it with proper emulation * there are no per-game protection devices, so it's something to do with the base hardware * there seem to be 2 checks, one based on a weird sector on the discs, the other based on a port read - - add additional hardware notes from ArcadeHacker - - layer enables on War Mission? (transitions from title screen etc.) + - Add additional hardware notes from ArcadeHacker + - Layer enables on War Mission? (transitions from title screen etc.) notes: - high scores will be defaulted if the data in the table is corrupt, the games give no @@ -31,50 +31,49 @@ */ - /* - Magnet System by - - EFO SA (Electrónica Funcional Operativa SA). - based on Cedar hardware - + Magnet System by EFO SA (Electrónica Funcional Operativa SA). + Based on Cedar hardware http://retrolaser.es/cedar-computer-el-ordenador-profesional-de-efo-sa/ http://www.recreativas.org/magnet-system-2427-efosa A number of original games as well as conversions were advertised for this system, it is however - believed that EFO went bankrupt before anything hit the market. The only 3 dumped games are - conversions and appear to be in incomplete states (it is rather easy to break Time Scanner for - example, the ball simply gets stuck in some places) These are not simply bootlegs, they're - completely original pieces of code more akin to home computer ports. + believed that EFO went bankrupt before anything hit the market. The conversions are not simply + bootlegs, they're completely original pieces of code more akin to home computer ports. The following were advertised Original Games - A Day in Space ** * - Crazy Driver + - Formula - Jungle Trophy - - Quadrum - - War Mission ** * - - The Burning Cave * - - Scorpio - Paris Dakar ** * + - Quadrum - Sailing Race - - Formula + - Scorpio + - The Burning Cavern * + - War Mission ** * Ports / Conversions - - Exzisus * + - Booby Kids * + - Cocomania (Pacmania) + - Dodge Ball - Double Dragon + - Dracula's Castle (Haunted House) + - Exzisus * - Flying Shark + - Super Contra - Time Scanner * + - Twin Eagle + - World Wars (Bermuda Triangle) - Xain d'Sleena * - - Boody Kids (Booby Kids?) ** screenshots present on flyer * dumps exist - Disk Protection Sectors are 1024 (0x400) bytes long but marked on the disc as 512 bytes as a copy protection @@ -100,7 +99,7 @@ The hardware consists of 5 main PCBs in a cage. 1x Sprite PCB On some systems, there are small memory sub-boards on the Master PCB and Sprite PCB; due to the awkwardness of -the banking at times (and the fact that even with 4 banks of 256 colours, only one can be active) +the banking at times (and the fact that even with 4 banks of 256 colours, only one can be active). I suspect the additional memory was an afterthought. SOUND BOARD @@ -171,6 +170,8 @@ MASTER BOARD |__ CONN | |________________________________________________________________________| +Xtal 1 = 16.000 MHz +Xtal 2 = 20.000 MHz PLANES BOARD ___________________________________________________________________________ @@ -265,7 +266,6 @@ MASTER BOARD | __________ | | |MC74HC157| | |________________________________________________________________________| - */ #include "emu.h" @@ -463,18 +463,18 @@ void cedar_magnet_state::cedar_magnet_io(address_map &map) void cedar_magnet_state::cedar_bank0(address_map &map) { - /* memory configuration 0 */ + // Memory configuration 0 map(0x00000, 0x0ffff).m(m_sub_ram_bankdev, FUNC(address_map_bank_device::amap8)); - /* memory configuration 1 */ + // Memory configuration 1 map(0x10000, 0x1dfff).m(m_sub_ram_bankdev, FUNC(address_map_bank_device::amap8)); map(0x1e000, 0x1ffff).rom().region("maincpu", 0x0000); - /* memory configuration 2*/ + // memory configuration 2 map(0x20000, 0x2bfff).m(m_sub_ram_bankdev, FUNC(address_map_bank_device::amap8)); map(0x2c000, 0x2ffff).rw(FUNC(cedar_magnet_state::other_cpu_r), FUNC(cedar_magnet_state::other_cpu_w)); - /* memory configuration 3*/ + // memory configuration 3 map(0x30000, 0x31fff).rom().region("maincpu", 0x0000).mirror(0x0e000); } @@ -865,7 +865,6 @@ void cedar_magnet_state::ic49_pio_pb_w(u8 data) // 0x42 LOGMASKED(LOG_IC49_PIO_PB, "output bit 0x01 (LED) %d\n", (data >> 0)&1); // B0 -> LED LD1 - int soundselect = (m_ic49_pio_pb_val & 0x70) >> 4; handle_sub_board_cpu_lines(*m_cedsound, oldsoundselect, soundselect); @@ -937,8 +936,8 @@ INTERRUPT_GEN_MEMBER(cedar_magnet_state::irq) void cedar_magnet_state::cedar_magnet(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 4000000); /* ? MHz */ + // Basic machine hardware + Z80(config, m_maincpu, 4000000); // ? MHz m_maincpu->set_addrmap(AS_PROGRAM, &cedar_magnet_state::cedar_magnet_map); m_maincpu->set_addrmap(AS_IO, &cedar_magnet_state::cedar_magnet_io); m_maincpu->set_vblank_int("screen", FUNC(cedar_magnet_state::irq)); @@ -961,7 +960,7 @@ void cedar_magnet_state::cedar_magnet(machine_config &config) m_ic49_pio->in_pb_callback().set(FUNC(cedar_magnet_state::ic49_pio_pb_r)); m_ic49_pio->out_pb_callback().set(FUNC(cedar_magnet_state::ic49_pio_pb_w)); - /* video hardware */ + // Video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(50); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -982,69 +981,81 @@ void cedar_magnet_state::cedar_magnet(machine_config &config) config.set_perfect_quantum(m_maincpu); } +/* + Protection? (Time Scanner note) -#define BIOS_ROM \ - ROM_REGION( 0x10000, "maincpu", 0 ) \ - ROM_LOAD( "magnet-master-vid-e03.bin", 0x00000, 0x02000, CRC(86c4a4f0) SHA1(6db1a006b2e0b2a7cc9748ade881debb098b6757) ) - - - -ROM_START( cedmag ) - BIOS_ROM + One part of the code is a weird loop checking values from port 0x7c while doing other nonsensical stuff, a flag gets set to 0xff if it fails. - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - // no disk inserted -ROM_END + The other part is after reading the weird extra block on the disk (score / protection data at 0xea400 in the disk image*) and again a flag + gets set to 0xff in certain conditions there's then a check after inserting a coin, these values can't be 0xff at that point, and there + doesn't appear to be any code to reset them. -ROM_START( mag_time ) - BIOS_ROM + *0xea400 is/was track 4e, side 00, sector 01 for future reference if the floppy format changes - ROM_REGION( 0x100000, "flop:disk", 0 ) - ROM_LOAD( "timescanner.img", 0x00000, 0xf0000, CRC(214c558c) SHA1(9c71fce35acaf17ac685f77aebb1b0a930060f0b) ) -ROM_END + All games have the same code in them but at different addresses +*/ +void cedar_magnet_state::kludge_protection() +{ + const int max_addr = 0x3ffff; -ROM_START( mag_exzi ) - BIOS_ROM + if (m_address1hack == -1) + { + for (int i = 0; i < max_addr - 4; i++) + { + if ((m_ram0[i + 0] == 0x7f) && (m_ram0[i + 1] == 0xc8) && (m_ram0[i + 2] == 0x3e) && (m_ram0[i + 3] == 0xff)) + { + m_address1hack = i + 2; + logerror("found patch at %06x\n", i + 2); + break; + } + } + } + else + { + if ((m_ram0[m_address1hack] == 0x3e) && (m_ram0[m_address1hack + 1] == 0xff)) m_ram0[m_address1hack] = 0xc9; + } - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - ROM_LOAD( "exzisus.img", 0x00000, 0xf0000, CRC(3705e9dc) SHA1(78c8010d224f5deb202a29bd273ea7dc85ddcdb4) ) -ROM_END + if (m_address2hack == -1) + { + for (int i = 0; i < max_addr - 4; i++) + { + if ((m_ram0[i + 0] == 0x10) && (m_ram0[i + 1] == 0xdd) && (m_ram0[i + 2] == 0x3e) && (m_ram0[i + 3] == 0xff)) + { + m_address2hack = i + 2; + logerror("found patch at %06x\n", i + 2); + break; + } + } + } + else + { + if ((m_ram0[m_address2hack] == 0x3e) && (m_ram0[m_address2hack + 1] == 0xff)) m_ram0[m_address2hack] = 0xc9; + } +} -ROM_START( mag_xain ) - BIOS_ROM - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - ROM_LOAD( "xain.img", 0x00000, 0xf0000, CRC(5647849f) SHA1(edd2f3f6359424583bf526bf4601476dc849e617) ) -ROM_END +#define BIOS_ROM \ + ROM_REGION( 0x10000, "maincpu", 0 ) \ + ROM_LOAD( "magnet-master-vid-e03.bin", 0x00000, 0x02000, CRC(86c4a4f0) SHA1(6db1a006b2e0b2a7cc9748ade881debb098b6757) ) -/* - Data after 0xd56b0 would not read consistently, however the game only appears to use the first 24 tracks (up to 0x48fff) - as it loads once on startup, not during gameplay, and all tracks before that gave consistent reads. There is data after this - point but it is likely leftovers from another game / whatever was on the disk before, so for our purposes this should be fine. - Some bullets do seem to spawn from locations where there are no enemies, but I think this is just annoying game design. -*/ -ROM_START( mag_war ) +ROM_START( cedmag ) BIOS_ROM ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - ROM_LOAD( "war mission wm 4_6_87.img", 0x00000, 0xf0000, CRC(7c813520) SHA1(2ba5999709a52302aa367fb46199b331421a0d56) ) + // no disk inserted ROM_END -/* - Data read 100% consistently with multiple drives -*/ -ROM_START( mag_wara ) +// Marked as BAD_DUMP because of the missing tracks (hence the different size). +ROM_START( mag_boob ) BIOS_ROM ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - ROM_LOAD( "war mission wm 9_4_87.img", 0x00000, 0xf0000, CRC(6296ea6f) SHA1(c0aaf51362bfa3362ef39c3fb1e1c848b73fd780) ) + ROM_LOAD( "boobykid.img", 0x00000, 0xde000, BAD_DUMP CRC(3196ffb4) SHA1(99732f74bb907ed6a93ed097c7b211c709d8bf85) ) // Floppy labeled "BOOBY KID CC / TUBO VERTICAL / 1 joystick, 2 pulsadores" ROM_END -/* - Data read 100% consistently with multiple drives -*/ +// Data read 100% consistently with multiple drives ROM_START( mag_burn ) BIOS_ROM @@ -1067,16 +1078,6 @@ ROM_START( mag_day ) ROM_LOAD( "adayinspace 31_3_87.img", 0x00000, 0xf0000, CRC(bc65302d) SHA1(6ace68a0b5f7a07a8f5c318c5359011074e7f2ec) ) ROM_END -// track 79 side 1 (file offset 0x0ee800) would not read, but it appears to be outside of the used data -// this also has many scores stored on the disk at offset 0x01cc00, invalidating these does reset the -// score table to 'EFO 100000' scores, but then it never writes new scores? -ROM_START( mag_pdak ) - BIOS_ROM - - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - ROM_LOAD( "paris.dsk 31_3_87.img", 0x00000, 0xf0000, BAD_DUMP CRC(2c4ee9e1) SHA1(22c2b75c16aca95ecf2199451c1bd12dd3a3844c) ) -ROM_END - /* The following tracks/sides failed to read (bad disk) @@ -1090,12 +1091,10 @@ track:74:0 (file offset:0x0de000 - 0x0df7ff) track:75:0 (file offset:0x0e1000 - 0x0e27ff) track:76:0 (file offset:0x0e4000 - 0x0e57ff) -these areas aren't read by the code that currently loads, but other areas also didn't read consistently - -the 3 dumps in the set below contain different reads of tracks 0-67 +These areas aren't read by the code that currently loads, but other areas also didn't read consistently. +The 3 dumps in the set below contain different reads of tracks 0-67. */ - ROM_START( mag_drac ) BIOS_ROM @@ -1105,81 +1104,73 @@ ROM_START( mag_drac ) ROM_LOAD( "drac3.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(7060e4a2) SHA1(b8e5437afff11d57a40c092d005d6b075819537a)) ROM_END +ROM_START( mag_exzi ) + BIOS_ROM + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "exzisus.img", 0x00000, 0xf0000, CRC(3705e9dc) SHA1(78c8010d224f5deb202a29bd273ea7dc85ddcdb4) ) +ROM_END /* - protection? (Time Scanner note) - - one part of the code is a weird loop checking values from port 0x7c while doing other nonsensical stuff, a flag gets set to 0xff if it fails - - the other part is after reading the weird extra block on the disk (score / protection data at 0xea400 in the disk image*) and again a flag - gets set to 0xff in certain conditions there's then a check after inserting a coin, these values can't be 0xff at that point, and there - doesn't appear to be any code to reset them. - - *0xea400 is/was track 4e, side 00, sector 01 for future reference if the floppy format changes - - all games have the same code in them but at different addresses + Track 79 side 1 (file offset 0x0ee800) would not read, but it appears to be outside of the used data + this also has many scores stored on the disk at offset 0x01cc00, invalidating these does reset the + score table to 'EFO 100000' scores, but then it never writes new scores? */ +ROM_START( mag_pdak ) + BIOS_ROM + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "paris.dsk 31_3_87.img", 0x00000, 0xf0000, BAD_DUMP CRC(2c4ee9e1) SHA1(22c2b75c16aca95ecf2199451c1bd12dd3a3844c) ) +ROM_END -void cedar_magnet_state::kludge_protection() -{ - const int max_addr = 0x3ffff; - - if (m_address1hack == -1) - { - for (int i = 0; i < max_addr - 4; i++) - { - if ((m_ram0[i + 0] == 0x7f) && (m_ram0[i + 1] == 0xc8) && (m_ram0[i + 2] == 0x3e) && (m_ram0[i + 3] == 0xff)) - { - m_address1hack = i + 2; - logerror("found patch at %06x\n", i + 2); - break; - } - } - } - else - { - if ((m_ram0[m_address1hack] == 0x3e) && (m_ram0[m_address1hack + 1] == 0xff)) m_ram0[m_address1hack] = 0xc9; - } +ROM_START( mag_time ) + BIOS_ROM - if (m_address2hack == -1) - { - for (int i = 0; i < max_addr - 4; i++) - { - if ((m_ram0[i + 0] == 0x10) && (m_ram0[i + 1] == 0xdd) && (m_ram0[i + 2] == 0x3e) && (m_ram0[i + 3] == 0xff)) - { - m_address2hack = i + 2; - logerror("found patch at %06x\n", i + 2); - break; - } - } - } - else - { - if ((m_ram0[m_address2hack] == 0x3e) && (m_ram0[m_address2hack + 1] == 0xff)) m_ram0[m_address2hack] = 0xc9; - } -} + ROM_REGION( 0x100000, "flop:disk", 0 ) + ROM_LOAD( "timescanner.img", 0x00000, 0xf0000, CRC(214c558c) SHA1(9c71fce35acaf17ac685f77aebb1b0a930060f0b) ) +ROM_END -} // anonymous namespace +/* + Data after 0xd56b0 would not read consistently, however the game only appears to use the first 24 tracks (up to 0x48fff) + as it loads once on startup, not during gameplay, and all tracks before that gave consistent reads. There is data after this + point but it is likely leftovers from another game / whatever was on the disk before, so for our purposes this should be fine. + Some bullets do seem to spawn from locations where there are no enemies, but I think this is just annoying game design. +*/ +ROM_START( mag_war ) + BIOS_ROM -GAME( 1987, cedmag, 0, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Magnet System", MACHINE_IS_BIOS_ROOT ) + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "war mission wm 4_6_87.img", 0x00000, 0xf0000, CRC(7c813520) SHA1(2ba5999709a52302aa367fb46199b331421a0d56) ) +ROM_END -GAME( 1987, mag_time, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "Time Scanner (TS 2.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // original game was by Sega +// Data read 100% consistently with multiple drives +ROM_START( mag_wara ) + BIOS_ROM -GAME( 1987, mag_exzi, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Exzisus (EX 1.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // original game was by Taito + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "war mission wm 9_4_87.img", 0x00000, 0xf0000, CRC(6296ea6f) SHA1(c0aaf51362bfa3362ef39c3fb1e1c848b73fd780) ) +ROM_END -GAME( 1987, mag_xain, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Xain'd Sleena (SC 3.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // original game was by Technos +ROM_START( mag_xain ) + BIOS_ROM -GAME( 1987, mag_war, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 04/06/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date in program -GAME( 1987, mag_wara, mag_war,cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 09/04/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // the '9' was handwritten over a printed letter on disk label, date not in program + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "xain.img", 0x00000, 0xf0000, CRC(5647849f) SHA1(edd2f3f6359424583bf526bf4601476dc849e617) ) +ROM_END -GAME( 1987, mag_burn, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "The Burning Cavern (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date on label -GAME( 1987, mag_day, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "A Day In Space (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date on label +} // anonymous namespace -// has unemulated 'handlebar' option that can be enabled in service mode -GAME( 1987, mag_pdak, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Paris Dakar (31/03/87, Spanish)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // date on label -GAME( 1987, mag_drac, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Dracula's Castle (Magnet System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1987, cedmag, 0, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Magnet System", MACHINE_IS_BIOS_ROOT ) +GAME( 1987, mag_boob, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "Booby Kids (Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game (Kid no Hore Hore Daisakusen) by Nichibutsu +GAME( 1987, mag_burn, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "The Burning Cavern (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date on label +GAME( 1987, mag_day, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "A Day In Space (31/03/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date on label +GAME( 1987, mag_drac, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Dracula's Castle (Magnet System)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1987, mag_exzi, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Exzisus (EX 1.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game was by Taito +GAME( 1987, mag_pdak, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Paris Dakar (31/03/87, Spanish)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date on label, has unemulated 'handlebar' option that can be enabled in service mode +GAME( 1987, mag_time, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "Time Scanner (TS 2.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game was by Sega +GAME( 1987, mag_war, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 04/06/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Date in program +GAME( 1987, mag_wara, mag_war, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT90, "EFO SA / Cedar", "War Mission (WM 09/04/87)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // The '9' was handwritten over a printed letter on disk label, date not in program +GAME( 1987, mag_xain, cedmag, cedar_magnet, cedar_magnet, cedar_magnet_state, empty_init, ROT0, "EFO SA / Cedar", "Xain'd Sleena (SC 3.0, Magnet System)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Original game was by Technos diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 6f57bb7c093..a53247e6255 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17402,6 +17402,7 @@ twinsed2 // (c) 1994 Electronic Devices @source:efo/cedar_magnet.cpp cedmag +mag_boob mag_burn mag_day mag_drac |