From 86c6e83b4c2b8aca18db2565e72b03f90a25dda5 Mon Sep 17 00:00:00 2001 From: ClawGrip Date: Wed, 13 Sep 2023 17:28:21 +0200 Subject: [PATCH] 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] --- src/mame/efo/cedar_magnet.cpp | 371 +++++++++++++++++----------------- src/mame/mame.lst | 1 + 2 files changed, 182 insertions(+), 190 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 - - Jungle Trophy - - Quadrum - - War Mission ** * - - The Burning Cave * - - Scorpio - - Paris Dakar ** * - - Sailing Race - Formula + - Jungle Trophy + - Paris Dakar ** * + - Quadrum + - Sailing Race + - 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,146 +981,19 @@ void cedar_magnet_state::cedar_magnet(machine_config &config) config.set_perfect_quantum(m_maincpu); } - -#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 - - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - // no disk inserted -ROM_END - -ROM_START( mag_time ) - BIOS_ROM - - ROM_REGION( 0x100000, "flop:disk", 0 ) - ROM_LOAD( "timescanner.img", 0x00000, 0xf0000, CRC(214c558c) SHA1(9c71fce35acaf17ac685f77aebb1b0a930060f0b) ) -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 - -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 - - /* - 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. + Protection? (Time Scanner note) - 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 + 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 ) - ROM_LOAD( "war mission wm 4_6_87.img", 0x00000, 0xf0000, CRC(7c813520) SHA1(2ba5999709a52302aa367fb46199b331421a0d56) ) -ROM_END - -/* - Data read 100% consistently with multiple drives -*/ -ROM_START( mag_wara ) - 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_END - -/* - Data read 100% consistently with multiple drives -*/ -ROM_START( mag_burn ) - BIOS_ROM - - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) // - ROM_LOAD( "theburningcavern 31_3_87.img", 0x00000, 0xf0000, CRC(c95911f8) SHA1(eda3bdbbcc3e00a7da83253209e832855c2968b1) ) -ROM_END - -/* - Data read 100% consistently with non-original drive (usually gives worse results) - later tracks showed differences with original drive on each read (around 0xeef80 onwards, doesn't seem to be game data) - - weirdly there's was a single byte in an earlier track that read consistently, but in a different way for each drive - 0x2480e: 9d (non-original) vs 1d (original drive) - 1d seems to be correct as the same data is also elsewhere on the disc -*/ -ROM_START( mag_day ) - BIOS_ROM - - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - 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) - -track:68:0 (file offset:0x0cc000 - 0x0cd7ff) -track:69:0 (file offset:0x0cf000 - 0x0d07ff) -track:70:0 (file offset:0x0d2000 - 0x0d37ff) -track:71:0 (file offset:0x0d5000 - 0x0d67ff) -track:72:0 (file offset:0x0d8000 - 0x0d97ff) -track:73:0 (file offset:0x0db000 - 0x0dc7ff) -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 - -*/ - -ROM_START( mag_drac ) - BIOS_ROM - - ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) - ROM_LOAD( "drac.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(2b5ca6f8) SHA1(063ea3b55bf95d05c866c0fcdb41c307c484a4f8) ) - ROM_LOAD( "drac2.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(cf6c1dd2) SHA1(7adb5146b050172090556927bf6d30ba8265107a) ) - ROM_LOAD( "drac3.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(7060e4a2) SHA1(b8e5437afff11d57a40c092d005d6b075819537a)) -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 + 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 + All games have the same code in them but at different addresses */ - - void cedar_magnet_state::kludge_protection() { const int max_addr = 0x3ffff; @@ -1161,25 +1033,144 @@ void cedar_magnet_state::kludge_protection() } } + + +#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 + + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + // no disk inserted +ROM_END + +// 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( "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 +ROM_START( mag_burn ) + BIOS_ROM + + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) // + ROM_LOAD( "theburningcavern 31_3_87.img", 0x00000, 0xf0000, CRC(c95911f8) SHA1(eda3bdbbcc3e00a7da83253209e832855c2968b1) ) +ROM_END + +/* + Data read 100% consistently with non-original drive (usually gives worse results) + later tracks showed differences with original drive on each read (around 0xeef80 onwards, doesn't seem to be game data) + + weirdly there's was a single byte in an earlier track that read consistently, but in a different way for each drive + 0x2480e: 9d (non-original) vs 1d (original drive) + 1d seems to be correct as the same data is also elsewhere on the disc +*/ +ROM_START( mag_day ) + BIOS_ROM + + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "adayinspace 31_3_87.img", 0x00000, 0xf0000, CRC(bc65302d) SHA1(6ace68a0b5f7a07a8f5c318c5359011074e7f2ec) ) +ROM_END + +/* +The following tracks/sides failed to read (bad disk) + +track:68:0 (file offset:0x0cc000 - 0x0cd7ff) +track:69:0 (file offset:0x0cf000 - 0x0d07ff) +track:70:0 (file offset:0x0d2000 - 0x0d37ff) +track:71:0 (file offset:0x0d5000 - 0x0d67ff) +track:72:0 (file offset:0x0d8000 - 0x0d97ff) +track:73:0 (file offset:0x0db000 - 0x0dc7ff) +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. +*/ +ROM_START( mag_drac ) + BIOS_ROM + + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "drac.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(2b5ca6f8) SHA1(063ea3b55bf95d05c866c0fcdb41c307c484a4f8) ) + ROM_LOAD( "drac2.dsk", 0x00000, 0xf0000, BAD_DUMP CRC(cf6c1dd2) SHA1(7adb5146b050172090556927bf6d30ba8265107a) ) + 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 + +/* + 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 + +ROM_START( mag_time ) + BIOS_ROM + + ROM_REGION( 0x100000, "flop:disk", 0 ) + ROM_LOAD( "timescanner.img", 0x00000, 0xf0000, CRC(214c558c) SHA1(9c71fce35acaf17ac685f77aebb1b0a930060f0b) ) +ROM_END + +/* + 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 + + ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) + ROM_LOAD( "war mission wm 4_6_87.img", 0x00000, 0xf0000, CRC(7c813520) SHA1(2ba5999709a52302aa367fb46199b331421a0d56) ) +ROM_END + +// Data read 100% consistently with multiple drives +ROM_START( mag_wara ) + 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_END + +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 + + } // anonymous namespace -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_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_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_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 - -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_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 - -// 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