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]
This commit is contained in:
ClawGrip 2023-09-13 17:28:21 +02:00 committed by GitHub
parent f1dd0d0651
commit 86c6e83b4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 182 additions and 190 deletions

View File

@ -3,26 +3,26 @@
// thanks to: Ricky2001, ArcadeHacker, IFW // thanks to: Ricky2001, ArcadeHacker, IFW
/* /*
todo: TODO:
- fix sound emulation (speed needs verifying + sample playback) - Fix sound emulation (speed needs verifying + sample playback)
- fix sprite communication / banking - Fix sprite communication / banking
* bit "output bit 0x02 %d (IC21)" at 0x42 might be important * 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_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 * mag_xain sometimes leaves old sprites on the screen, probably due to a lost clear
command command
- fix flipscreen - Fix flipscreen
- verify behavior of unknown / unused ports / interrupt sources etc. - Verify behavior of unknown / unused ports / interrupt sources etc.
- verify the disk images, convert to a better format that can natively store protection - Verify the disk images, convert to a better format that can natively store protection
* RAW data also available if required * RAW data also available if required
* as mentioned, the disks are copy protected, see notes below * as mentioned, the disks are copy protected, see notes below
- Use proper floppy drive emulation code that originally came from MESS (tied with above) - 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) - 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 - 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 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 * there seem to be 2 checks, one based on a weird sector on the discs, the other based on
a port read a port read
- add additional hardware notes from ArcadeHacker - Add additional hardware notes from ArcadeHacker
- layer enables on War Mission? (transitions from title screen etc.) - Layer enables on War Mission? (transitions from title screen etc.)
notes: notes:
- high scores will be defaulted if the data in the table is corrupt, the games give no - high scores will be defaulted if the data in the table is corrupt, the games give no
@ -31,50 +31,49 @@
*/ */
/* /*
Magnet System by Magnet System by EFO SA (Electrónica Funcional Operativa SA).
Based on Cedar hardware
EFO SA (Electrónica Funcional Operativa SA).
based on Cedar hardware
http://retrolaser.es/cedar-computer-el-ordenador-profesional-de-efo-sa/ http://retrolaser.es/cedar-computer-el-ordenador-profesional-de-efo-sa/
http://www.recreativas.org/magnet-system-2427-efosa 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 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 believed that EFO went bankrupt before anything hit the market. The conversions are not simply
conversions and appear to be in incomplete states (it is rather easy to break Time Scanner for bootlegs, they're completely original pieces of code more akin to home computer ports.
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.
The following were advertised The following were advertised
Original Games Original Games
- A Day in Space ** * - A Day in Space ** *
- Crazy Driver - Crazy Driver
- Jungle Trophy
- Quadrum
- War Mission ** *
- The Burning Cave *
- Scorpio
- Paris Dakar ** *
- Sailing Race
- Formula - Formula
- Jungle Trophy
- Paris Dakar ** *
- Quadrum
- Sailing Race
- Scorpio
- The Burning Cavern *
- War Mission ** *
Ports / Conversions Ports / Conversions
- Exzisus * - Booby Kids *
- Cocomania (Pacmania)
- Dodge Ball
- Double Dragon - Double Dragon
- Dracula's Castle (Haunted House)
- Exzisus *
- Flying Shark - Flying Shark
- Super Contra
- Time Scanner * - Time Scanner *
- Twin Eagle
- World Wars (Bermuda Triangle)
- Xain d'Sleena * - Xain d'Sleena *
- Boody Kids (Booby Kids?)
** screenshots present on flyer ** screenshots present on flyer
* dumps exist * dumps exist
Disk Protection Disk Protection
Sectors are 1024 (0x400) bytes long but marked on the disc as 512 bytes as a copy 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 1x Sprite PCB
On some systems, there are small memory sub-boards on the Master PCB and Sprite PCB; due to the awkwardness of 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. I suspect the additional memory was an afterthought.
SOUND BOARD SOUND BOARD
@ -171,6 +170,8 @@ MASTER BOARD
|__ CONN | |__ CONN |
|________________________________________________________________________| |________________________________________________________________________|
Xtal 1 = 16.000 MHz
Xtal 2 = 20.000 MHz
PLANES BOARD PLANES BOARD
___________________________________________________________________________ ___________________________________________________________________________
@ -265,7 +266,6 @@ MASTER BOARD
| __________ | | __________ |
| |MC74HC157| | | |MC74HC157| |
|________________________________________________________________________| |________________________________________________________________________|
*/ */
#include "emu.h" #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) 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)); 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(0x10000, 0x1dfff).m(m_sub_ram_bankdev, FUNC(address_map_bank_device::amap8));
map(0x1e000, 0x1ffff).rom().region("maincpu", 0x0000); 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(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)); 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); 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 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; int soundselect = (m_ic49_pio_pb_val & 0x70) >> 4;
handle_sub_board_cpu_lines(*m_cedsound, oldsoundselect, soundselect); 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) void cedar_magnet_state::cedar_magnet(machine_config &config)
{ {
/* basic machine hardware */ // Basic machine hardware
Z80(config, m_maincpu, 4000000); /* ? MHz */ Z80(config, m_maincpu, 4000000); // ? MHz
m_maincpu->set_addrmap(AS_PROGRAM, &cedar_magnet_state::cedar_magnet_map); 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_addrmap(AS_IO, &cedar_magnet_state::cedar_magnet_io);
m_maincpu->set_vblank_int("screen", FUNC(cedar_magnet_state::irq)); 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->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)); 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_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(50); screen.set_refresh_hz(50);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); 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); 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) Protection? (Time Scanner note)
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. 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_START( mag_war )
BIOS_ROM
ROM_REGION( 0x100000, "flop:disk", ROMREGION_ERASE00 ) 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
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
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 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. 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 *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() void cedar_magnet_state::kludge_protection()
{ {
const int max_addr = 0x3ffff; 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 } // 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, 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_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_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_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_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_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_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_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_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
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 )

View File

@ -17402,6 +17402,7 @@ twinsed2 // (c) 1994 Electronic Devices
@source:efo/cedar_magnet.cpp @source:efo/cedar_magnet.cpp
cedmag cedmag
mag_boob
mag_burn mag_burn
mag_day mag_day
mag_drac mag_drac